Java发送电子邮件:Jakarta Mail(JavaMail)库

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Java发送电子邮件:Jakarta Mail(JavaMail)库



在Java中,发送电子邮件传统上是通过强大且灵活的API——JavaMail实现的。在Java EE迁移到Eclipse Foundation后,该库获得了新名称——Jakarta Mail(适用于Jakarta EE 9+)和新的包名jakarta.mail。在本指南中,我们将介绍如何配置和使用Jakarta Mail(或经典的JavaMail)通过SMTP服务器发送邮件。



什么是Jakarta Mail(JavaMail)?

Jakarta Mail是一个用于创建邮件客户端的平台无关框架。它提供了一组抽象,用于处理SMTP、POP3和IMAP协议。对于发送电子邮件,我们关注的是SMTP协议。该库支持:

  • 发送纯文本消息(text/plain)。
  • 发送带有附件的HTML邮件(multipart/mixed)。
  • 使用SSL/TLS加密(SMTPS)。
  • 在邮件服务器上进行身份验证。


安装与配置

要使用Jakarta Mail,您需要将依赖项添加到您的项目中。如果您使用Maven,请在pom.xml中添加:

<dependency>    <groupId>com.sun.mail</groupId>    <artifactId>jakarta.mail</artifactId>    <version>2.0.1</version></dependency>

对于经典的JavaMail(包名为javax.mail),请使用:

<dependency>    <groupId>javax.mail</groupId>    <artifactId>javax.mail-api</artifactId>    <version>1.6.2</version></dependency>

同时还需要一个实现(通常是com.sun.mail:javax.mail:1.6.2)。



发送基本纯文本邮件

让我们看一个通过Gmail(或其他任何)SMTP服务器发送电子邮件的最小示例。首先,创建一个包含SMTP设置的Properties对象:

import java.util.Properties;import jakarta.mail.*;import jakarta.mail.internet.InternetAddress;import jakarta.mail.internet.MimeMessage;

public class EmailSender { public static void main(String[] args) { // SMTP服务器设置(例如,Gmail) 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"); // TLS

// 身份验证 String username = "your-email@gmail.com"; String password = "your-app-password"; // 请使用应用专用密码!

// 创建会话 Session session = Session.getInstance(props, new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password); } });

try { // 构建邮件 Message message = new MimeMessage(session); message.setFrom(new InternetAddress(username)); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("recipient@example.com")); message.setSubject("来自Java的问候!"); message.setText("这是一条使用Jakarta Mail发送的测试消息。");

// 发送 Transport.send(message); System.out.println("邮件发送成功!"); } catch (MessagingException e) { e.printStackTrace(); } }}

重要提示:对于Gmail,请使用应用专用密码,而不是您的主密码。对于其他服务器(Yandex、Mail.ru),端口和主机设置可能会有所不同。

推荐