Java邮件发送机制深度解析
JavaMail API是Java平台处理电子邮件的核心组件,其底层基于TCP/IP协议与SMTP服务器进行通信。当我们调用Transport.send()方法时,客户端会与邮件服务器建立Socket连接,通过一系列SMTP命令(EHLO、AUTH、MAIL FROM等)完成认证和发送流程。
核心代码实现
// 配置邮件会话属性
Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.port", "587");
// 创建会话实例
Session session = Session.getInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
// 构建邮件内容
try {
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("from@example.com"));
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse("to@example.com"));
message.setSubject("测试主题");
message.setText("这是一封测试邮件");
// 发送邮件
Transport.send(message);
System.out.println("邮件发送成功");
} catch (MessagingException e) {
throw new RuntimeException(e);
}
高级功能实现
对于HTML内容和附件,可使用MimeBodyPart和MimeMultipart构建复杂邮件:
// 创建多部分消息
Multipart multipart = new MimeMultipart();
// 添加文本内容
BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setText("邮件正文");
multipart.addBodyPart(messageBodyPart);
// 添加附件
messageBodyPart = new MimeBodyPart();
DataSource source = new FileDataSource("attachment.pdf");
messageBodyPart.setDataHandler(new DataHandler(source));
messageBodyPart.setFileName("document.pdf");
multipart.addBodyPart(messageBodyPart);
message.setContent(multipart);
安全注意事项
在实际应用中,建议使用OAuth2认证替代明文密码存储,并通过SSL/TLS加密保证通信安全。同时应当合理处理异常,实现重试机制和日志记录,确保邮件发送系统的可靠性。
这种实现方式不仅适用于传统企业应用,也完全兼容云原生架构,可在微服务环境中作为独立的邮件服务组件部署。

被折叠的 条评论
为什么被折叠?



