使用Jakarta Mail (JavaMail) 在Java中发送电子邮件
发送电子邮件是Java企业应用中最常见的任务之一:用户注册、通知、密码重置以及营销邮件。长期以来,JavaMail库一直是事实上的标准,但在Java EE迁移到Eclipse Foundation后,它被重命名为Jakarta Mail。在本指南中,我们将详细介绍如何配置和使用Jakarta Mail在Java中发送电子邮件。
什么是Jakarta Mail?
Jakarta Mail(原JavaMail)是一个用于在Java应用程序中发送、接收和处理电子邮件的API。该库支持SMTP、POP3和IMAP协议,以及MIME标准,允许发送纯文本邮件、带附件的邮件、HTML格式邮件以及包含图片的邮件。
安装与依赖配置
要使用Jakarta Mail,您需要在项目中添加依赖。如果您使用Maven,请在pom.xml中添加:
<dependency> <groupId>com.sun.mail</groupId> <artifactId>jakarta.mail</artifactId> <version>2.0.1</version></dependency>对于Gradle:
implementation 'com.sun.mail:jakarta.mail:2.0.1'重要提示:如果您使用Java 8或更早版本,请确保Jakarta Mail版本兼容——对于Java 8,可以使用1.6.x版本(例如javax.mail:javax.mail-api:1.6.2)。
Java中发送电子邮件的基础操作
让我们看一个最简单的示例——通过Gmail的SMTP服务器发送纯文本邮件。您需要:
- 一个Gmail账户(或其他邮件服务商)
- 应用专用密码(如果启用了两步验证)
- 允许访问安全性较低的应用程序(如果需要)
发送代码:
import jakarta.mail.*;import jakarta.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"); props.put("mail.smtp.port", "587"); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.starttls.enable", "true");
// 2. 身份验证 Session session = Session.getInstance(props, new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("your-email@gmail.com", "your-app-password"); } });
try { // 3. 创建邮件 Message message = new MimeMessage(session); message.setFrom(new InternetAddress("from-email@gmail.com")); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("recipient@example.com")); message.setSubject("来自Java的测试邮件"); message.setText("你好!这封邮件是通过Jakarta Mail发送的。");
// 4. 发送 Transport.send(message); System.out.println("邮件发送成功!"); } catch (MessagingException e) { e.printStackTrace(); } }}发送HTML邮件和带附件的邮件
通常需要发送带格式(HTML)的邮件或附加文件。这时需要使用MimeMultipart和MimeBodyPart。
HTML邮件
MimeBodyPart htmlPart = new MimeBodyPart();htmlPart.setContent("<h1>你好!</h1><p>这是来自Java的HTML邮件。</p>", "text/html; charset=utf-8");
Multipart mu