1. 概述
本篇教程将介绍如何使用 Jakarta Mail API 在 Java 中发送带有单个或多个附件的电子邮件。
2. 项目配置
我们首先在项目中添加 angus-mail 依赖:
<dependency>
<groupId>org.eclipse.angus</groupId>
<artifactId>angus-mail</artifactId>
<version>2.0.1</version>
</dependency>
Angus Mail 是 Eclipse 提供的 Jakarta Mail API 的实现之一,目前是较为推荐的选择。
3. 发送带附件的邮件
首先,我们需要配置邮件服务提供商的相关认证信息(比如 SMTP 地址、端口、用户名和密码)。这部分内容可以参考 Baeldung 的基础邮件发送指南。
然后创建一个 Session
对象,传入主机地址、端口号、用户名和密码等参数。这些信息通常由你的邮件服务商提供,当然也可以使用一些假的 SMTP 测试服务器来调试代码。
✅ Session
对象本质上是一个连接工厂,负责处理 JavaMail 的配置和认证逻辑。
有了 Session
实例之后,我们可以继续构造邮件内容。先创建 MimeMessage
和 MimeBodyPart
对象:
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
message.setSubject("Test Mail Subject");
BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setText("Mail Body");
上面这段代码完成了邮件的基本信息设置:发件人、收件人、主题,以及邮件正文部分。
接下来要添加附件,需要再创建一个 MimeBodyPart
:
MimeBodyPart attachmentPart = new MimeBodyPart();
attachmentPart.attachFile(new File("path/to/file"));
现在我们有两个 MimeBodyPart
:一个是正文内容,另一个是附件。我们需要把它们组合起来,使用 MimeMultipart
来承载:
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBodyPart);
multipart.addBodyPart(attachmentPart);
最后,将这个 Multipart
设置为邮件的内容,并调用 Transport.send()
方法发送邮件:
message.setContent(multipart);
Transport.send(message);
📌 总结一下结构关系:
Message
包含一个MimeMultipart
MimeMultipart
可以包含多个MimeBodyPart
- 每个
MimeBodyPart
可以是正文内容、附件等
⚠️ 如果你想发送多个附件,只需要继续创建并添加更多的 MimeBodyPart
即可。
4. 小结
这篇教程讲解了如何在 Java 中通过 Jakarta Mail API 实现发送带附件的邮件功能,支持单个和多个附件。
一如既往,完整的示例代码可以在 GitHub 上找到:https://github.com/eugenp/tutorials/tree/master/core-java-modules/core-java-networking-2