Java SMTP发信示例需要把标题和内容base64编码要求不使用第三方库。
以下是使用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编码
原文地址: https://www.cveoy.top/t/topic/h0Hc 著作权归作者所有。请勿转载和采集!