Java发送电子邮件:JavaMail与Jakarta Mail完整指南

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

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

开始课程

使用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

推荐