1、简述
在现代应用中,邮件服务是不可或缺的一部分,无论是发送通知、验证用户身份还是传递报告。Java Mail API 是一个功能强大的工具,它可以帮助开发者轻松实现邮件的发送与接收功能。本文将介绍如何使用 Java Mail 发送和接收邮件,并提供详细的使用样例。
2、主要特点
- 协议支持:支持 SMTP、IMAP 和 POP3 协议。
- 附件功能:支持多种格式的附件。
- 富文本支持:支持 HTML 邮件。
- 加密传输:支持 SSL 和 TLS 协议。
- 跨平台:完全基于 Java,可在各种操作系统上运行。
在使用 Mail 之前,需要添加其依赖。以下是 Mail 的 Maven 依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
3、发送样例
在发送之前,要准备以下信息:
- SMTP 服务器地址(如:smtp.gmail.com、smtp.qq.com、smtp.126.com)
- 发件人邮箱及密码
- 收件人邮箱
在调用之前要确保邮箱SMTP是否开启,开启SMTP会生成密钥,通过该密钥来配合host发送邮件,如果是gmail要确认是否开启两步验证:
3.1 发送纯文本邮件
以下是发送一封简单文本邮件的代码:
import jakarta.mail.*;
import jakarta.mail.internet.*;
import java.util.Properties;
public class MailExample {
public static void sendTextMail() {
String host = "smtp.gmail.com"; // SMTP 服务器地址
String from = "your_email@gmail.com";
String password = "your_password";// 开启SMTP 申请的密钥
String to = "recipient_email@gmail.com";
// 配置属性
Properties props = new Properties();
props.put("mail.smtp.host", host);
props.put("mail.smtp.port", "587");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
// 获取会话对象
Session session = Session.getInstance(props, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(from, password);
}
});
try {
// 创建邮件
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
message.setSubject("Java Mail 测试");
message.setText("这是一封通过 Java Mail 发送的简单文本邮件!");
// 发送邮件
Transport.send(message);
System.out.println("邮件发送成功!");
} catch (MessagingException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
sendTextMail();
}
}
3.2 发送 HTML 邮件
HTML 邮件可以包含更丰富的内容,如图片、超链接等。
public static void sendHtmlMail() {
String host = "smtp.gmail.com";
String from = "your_email@gmail.com";
String password = "your_password";// 开启SMTP 申请的密钥
String to = "recipient_email@gmail.com";
Properties props = new Properties();
props.put("mail.smtp.host", host);
props.put("mail.smtp.port", "587");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
Session session = Session.getInstance(props, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(from, password);
}
});
try {
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
message.setSubject("HTML 邮件测试");
// 设置 HTML 内容
String htmlContent = "<h1>欢迎使用 Java Mail</h1><p>这是一个 <b>HTML</b> 格式的邮件!</p>";
message.setContent(htmlContent, "text/html;charset=UTF-8");
Transport.send(message);
System.out.println("HTML 邮件发送成功!");
} catch (MessagingException e) {
e.printStackTrace();
}
}
3.3 发送带附件的邮件
支持多种附件格式。
public static void sendMailWithAttachment() {
String host = "smtp.gmail.com";
String from = "your_email@gmail.com";
String password = "your_password";
String to = "recipient_email@gmail.com";
Properties props = new Properties();
props.put("mail.smtp.host", host);
props.put("mail.smtp.port", "587");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
Session session = Session.getInstance(props, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(from, password);
}
});
try {
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
message.setSubject("带附件的邮件测试");
// 创建邮件正文
MimeBodyPart textPart = new MimeBodyPart();
textPart.setText("请查看附件!");
// 创建附件部分
MimeBodyPart attachmentPart = new MimeBodyPart();
attachmentPart.attachFile("path/to/file.txt"); // 附件路径
// 合并正文和附件
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(textPart);
multipart.addBodyPart(attachmentPart);
message.setContent(multipart);
Transport.send(message);
System.out.println("带附件的邮件发送成功!");
} catch (Exception e) {
e.printStackTrace();
}
}
3.4 使用 SSL 加密发送邮件
SSL 是更安全的邮件传输方式。
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.port", "465");
props.put("mail.smtp.ssl.protocols", "TLSv1.2");
将上述配置替换为 SSL 的配置即可。
4、总结
通过本文的学习,您应该能够使用 Java Mail 实现以下功能:
- 发送文本邮件
- 发送 HTML 格式的邮件
- 发送带附件的邮件
- 配置 SSL 加密传输
Java Mail 的强大功能为开发邮件相关功能提供了极大的便利。如果有其他问题或需求,欢迎随时留言探讨!
评论区