以下是使用Java进行SMTP发信的示例代码,其中包括将标题和内容进行Base64编码的实现。

import java.io.*;
import java.net.Socket;
import java.nio.charset.StandardCharsets;
import java.util.Base64;

public class SMTPExample {

    public static void main(String[] args) throws IOException {
        String host = "smtp.example.com"; // SMTP服务器地址
        int port = 25; // SMTP服务器端口号

        String from = "sender@example.com"; // 发件人邮箱
        String to = "recipient@example.com"; // 收件人邮箱
        String subject = "Hello, World!"; // 邮件主题
        String content = "This is the content of the email."; // 邮件内容

        // 连接SMTP服务器
        Socket socket = new Socket(host, port);
        BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

        // 读取服务器返回的欢迎信息
        String response = reader.readLine();
        System.out.println(response);

        // 发送HELO命令
        writer.write("HELO " + host + "\r\n");
        writer.flush();
        response = reader.readLine();
        System.out.println(response);

        // 发送认证信息
        writer.write("AUTH LOGIN\r\n");
        writer.flush();
        response = reader.readLine();
        System.out.println(response);

        String username = "your_username"; // SMTP账号
        String password = "your_password"; // SMTP密码

        writer.write(Base64.getEncoder().encodeToString(username.getBytes(StandardCharsets.UTF_8)) + "\r\n");
        writer.flush();
        response = reader.readLine();
        System.out.println(response);

        writer.write(Base64.getEncoder().encodeToString(password.getBytes(StandardCharsets.UTF_8)) + "\r\n");
        writer.flush();
        response = reader.readLine();
        System.out.println(response);

        // 发送发件人信息
        writer.write("MAIL FROM:<" + from + ">\r\n");
        writer.flush();
        response = reader.readLine();
        System.out.println(response);

        // 发送收件人信息
        writer.write("RCPT TO:<" + to + ">\r\n");
        writer.flush();
        response = reader.readLine();
        System.out.println(response);

        // 开始邮件内容
        writer.write("DATA\r\n");
        writer.flush();
        response = reader.readLine();
        System.out.println(response);

        // 发送邮件头部
        writer.write("From: <" + from + ">\r\n");
        writer.write("To: <" + to + ">\r\n");
        writer.write("Subject: =?UTF-8?B?" + Base64.getEncoder().encodeToString(subject.getBytes(StandardCharsets.UTF_8)) + "?=\r\n");
        writer.write("Content-Type: text/plain; charset=UTF-8\r\n");
        writer.write("\r\n");
        writer.write(content + "\r\n");

        // 结束邮件内容
        writer.write(".\r\n");
        writer.flush();
        response = reader.readLine();
        System.out.println(response);

        // 发送QUIT命令
        writer.write("QUIT\r\n");
        writer.flush();
        response = reader.readLine();
        System.out.println(response);

        // 关闭连接
        reader.close();
        writer.close();
        socket.close();
    }
}

在上述代码中,将邮件主题和内容使用Base64进行编码,以确保在传输过程中不会出现乱码。编码后的邮件主题需要在开头添加"=?UTF-8?B?",并在结尾添加"?=",以指定编码方式为UTF-8,并使用Base64编码

Java SMTP发信示例需要把标题和内容base64编码要求不使用第三方库。

原文地址: https://www.cveoy.top/t/topic/h0Hc 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录