本文目录导读:

JavaMail 使用指南
JavaMail 是 Java 平台中用于发送和接收电子邮件的标准 API,下面是完整的使用指南。
添加依赖
Maven 项目
<dependency>
<groupId>javax.mail</groupId>
<artifactId>javax.mail-api</artifactId>
<version>1.6.2</version>
</dependency>
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>
Gradle 项目
implementation 'javax.mail:javax.mail-api:1.6.2' implementation 'com.sun.mail:javax.mail:1.6.2'
发送纯文本邮件
import javax.mail.*;
import javax.mail.internet.*;
import java.util.Properties;
public class EmailSender {
public static void main(String[] args) {
// 1. 创建配置属性
Properties props = new Properties();
props.put("mail.smtp.host", "smtp.gmail.com"); // SMTP服务器
props.put("mail.smtp.port", "587"); // 端口
props.put("mail.smtp.auth", "true"); // 需要认证
props.put("mail.smtp.starttls.enable", "true"); // 启用TLS
// 2. 创建认证信息
Session session = Session.getInstance(props, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("your-email@gmail.com", "your-password");
}
});
try {
// 3. 创建邮件消息
Message message = new MimeMessage(session);
// 设置发件人
message.setFrom(new InternetAddress("your-email@gmail.com"));
// 设置收件人
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse("recipient@example.com"));
// 设置邮件主题
message.setSubject("测试邮件");
// 设置邮件内容
message.setText("这是一封测试邮件的内容");
// 4. 发送邮件
Transport.send(message);
System.out.println("邮件发送成功!");
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
发送 HTML 邮件
// 创建 HTML 格式的邮件内容
String htmlContent = """
<html>
<body>
<h1 style="color: blue;">HTML邮件标题</h1>
<p>这是一封 <b>HTML</b> 格式的邮件</p>
<ul>
<li>项目1</li>
<li>项目2</li>
</ul>
</body>
</html>
""";
message.setContent(htmlContent, "text/html; charset=utf-8");
发送带附件的邮件
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
// 创建多部分邮件
MimeMultipart multipart = new MimeMultipart();
// 创建文本部分
MimeBodyPart textPart = new MimeBodyPart();
textPart.setText("邮件正文", "utf-8");
multipart.addBodyPart(textPart);
// 创建附件部分
MimeBodyPart attachmentPart = new MimeBodyPart();
DataSource source = new FileDataSource("path/to/attachment.pdf");
attachmentPart.setDataHandler(new DataHandler(source));
attachmentPart.setFileName(source.getName());
multipart.addBodyPart(attachmentPart);
// 设置多部分内容
message.setContent(multipart);
发送带内嵌图片的邮件
// 创建多部分邮件
MimeMultipart multipart = new MimeMultipart("related");
// 创建HTML文本部分
MimeBodyPart htmlPart = new MimeBodyPart();
String htmlContent = """
<html>
<body>
<h1>包含图片的邮件</h1>
<img src="cid:image1" alt="内嵌图片"/>
</body>
</html>
""";
htmlPart.setContent(htmlContent, "text/html; charset=utf-8");
multipart.addBodyPart(htmlPart);
// 创建图片部分
MimeBodyPart imagePart = new MimeBodyPart();
DataSource imageSource = new FileDataSource("path/to/image.jpg");
imagePart.setDataHandler(new DataHandler(imageSource));
imagePart.setContentID("<image1>"); // 设置内容ID,与HTML中的cid对应
imagePart.setDisposition(MimeBodyPart.INLINE);
multipart.addBodyPart(imagePart);
message.setContent(multipart);
完整示例:可配置的邮件工具类
import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;
public class MailUtil {
// 邮件配置
private static final String SMTP_HOST = "smtp.gmail.com";
private static final int SMTP_PORT = 587;
private static final String USERNAME = "your-email@gmail.com";
private static final String PASSWORD = "your-app-password";
/**
* 发送邮件
* @param to 收件人
* @param subject 主题
* @param content 内容(支持HTML)
* @param attachments 附件列表
*/
public static void sendMail(String to, String subject,
String content, List<File> attachments)
throws MessagingException {
Properties props = createProperties();
Session session = createSession(props);
MimeMessage message = new MimeMessage(session);
// 设置基本属性
message.setFrom(new InternetAddress(USERNAME));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
message.setSubject(subject);
message.setSentDate(new Date());
// 构建内容
if (attachments != null && !attachments.isEmpty()) {
// 有附件
MimeMultipart multipart = new MimeMultipart();
// 文本部分
MimeBodyPart textPart = new MimeBodyPart();
textPart.setContent(content, "text/html; charset=utf-8");
multipart.addBodyPart(textPart);
// 附件部分
for (File file : attachments) {
MimeBodyPart attachmentPart = new MimeBodyPart();
attachmentPart.attachFile(file);
multipart.addBodyPart(attachmentPart);
}
message.setContent(multipart);
} else {
// 无附件
message.setContent(content, "text/html; charset=utf-8");
}
// 发送邮件
Transport.send(message);
}
private static Properties createProperties() {
Properties props = new Properties();
props.put("mail.smtp.host", SMTP_HOST);
props.put("mail.smtp.port", SMTP_PORT);
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.debug", "true"); // 调试模式
return props;
}
private static Session createSession(Properties props) {
return Session.getInstance(props, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(USERNAME, PASSWORD);
}
});
}
// 使用示例
public static void main(String[] args) {
try {
String to = "recipient@example.com";
String subject = "测试邮件";
String content = """
<html>
<body>
<h2>测试邮件</h2>
<p>这是一封测试邮件,包含 <b>HTML</b> 格式</p>
</body>
</html>
""";
List<File> attachments = Arrays.asList(
new File("/path/to/file1.pdf"),
new File("/path/to/file2.txt")
);
sendMail(to, subject, content, attachments);
System.out.println("邮件发送成功!");
} catch (MessagingException e) {
System.err.println("邮件发送失败:" + e.getMessage());
e.printStackTrace();
}
}
}
常见问题与注意事项
1 Gmail 特殊配置
// Gmail 需要使用 App Password // 1. 开启两步验证 // 2. 生成应用密码 https://security.google.com/settings/security/apppasswords // 3. 使用生成的应用密码代替普通密码 // 或者使用 OAuth2 认证(更安全)
2 常见 SMTP 服务器配置
| 邮箱提供商 | SMTP服务器 | 端口 | TLS/SSL |
|---|---|---|---|
| Gmail | smtp.gmail.com | 587/465 | TLS/SSL |
| Outlook | smtp.office365.com | 587 | TLS |
| QQ邮箱 | smtp.qq.com | 465/587 | SSL/TLS |
| 163邮箱 | smtp.163.com | 465/25 | SSL |
3 错误处理建议
try {
// 发送邮件代码
} catch (AuthenticationFailedException e) {
// 认证失败
System.err.println("邮箱认证失败,请检查用户名密码");
} catch (SendFailedException e) {
// 发送失败
System.err.println("发送失败:" + e.getMessage());
} catch (MessagingException e) {
// 其他邮件异常
e.printStackTrace();
}
4 性能优化
// 1. 使用连接池(推荐 Jakarta Mail 2.x)
// 2. 关闭调试模式(生产环境)
props.put("mail.debug", "false");
// 3. 设置超时时间
props.put("mail.smtp.connectiontimeout", "10000"); // 连接超时
props.put("mail.smtp.timeout", "10000"); // 读取超时
props.put("mail.smtp.writetimeout", "10000"); // 写入超时
JavaMail 使用步骤:
- 配置邮件服务器属性
- 创建 Session 对象
- 创建 Message 对象
- 设置邮件内容(文本/HTML/附件)
- 发送邮件
关键点:
- 需要正确的 SMTP 服务器地址和端口
- 大多数邮箱需要开启 SMTP 服务并获取授权码
- 支持文本、HTML、附件、内嵌图片等多种格式
- 注意异常处理和超时设置
实际开发中,建议将邮件功能封装成工具类,方便复用和维护,对于更高的性能要求,可考虑使用 Spring Boot 的邮件支持模块。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播