Apache Commons Email 1.6.0 介绍与选型指南

介绍 Apache Commons Email 1.6.0:基于 JavaMail 的发送简化 API、类族与模块结构、官方示例及 Jakarta Mail/Simple Java Mail/Spring Mail 选型对比。

Apache Commons EmailApache Commons Email2026/10/18

Apache Commons Email 1.6.0 介绍与选型指南

目标:面向需要在 Java 应用中实现邮件发送(通知、告警、验证码等)的工程师,梳理 Apache Commons Email 1.6.0 的定位、模块结构、特性、官方示例与选型结论。本文为 A1 认知篇,不做本地安装实测,全部论断基于官方文档与发布渠道联网查证,关键论断随文标注来源与查询日期(2026-10-18)。

一、信息基准

二、软件概述

Apache Commons Email 的官方定位是"提供一套发送邮件的 API,构建在 Java Mail API 之上并对其做简化"(官网组件主页:"Commons Email aims to provide a API for sending email. It is built on top of the Java Mail API, which it aims to simplify.",查询日期 2026-10-18)。

本次介绍的稳定版本为 1.6.0(2023-12-17,Maven Central 实查;官网 Releases 节注明 "The latest version requires Java 8")。

  • 许可:Apache License 2.0(ASF 官方项目)。
  • 模块结构:官网明确要求在 Javax 与 Jakarta 两种实现之间二选一——org.apache.commons:commons-email2-javax 或 org.apache.commons:commons-email2-jakarta,任选其一都会自动引入核心模块 commons-email2-core(官网组件主页 Choose an implementation 节)。1.6.0 属于 1.x 单构件线;2.0 线拆分为上述三模块并尚处里程碑(2.0.0-M1,2024-06-27)。
  • 与 JavaMail 的关系:1.6.0 基于 Javax javax.mail API;Jakarta 命名空间迁移在 2.0 线完成(官网模块页与 Javadoc 分模块导航,查询日期 2026-10-18)。

三、核心概念

3.1 类族:按邮件形态分层

官网组件主页给出的核心类族(查询日期 2026-10-18):

类用途
SimpleEmail发送纯文本邮件
MultiPartEmail发送多部分(multipart)消息,支持附件(内嵌或随附)
HtmlEmail发送 HTML 邮件,具备 MultiPartEmail 全部能力,支持内嵌图片
ImageHtmlEmail在 HtmlEmail 基础上自动把图片引用转换为内嵌图片
EmailAttachment附件对象,配合 MultiPartEmail/HtmlEmail 使用

3.2 SMTP 会话要素

从用户指南示例可见其配置面:setHostName(SMTP 服务器,未设置时回退系统属性 mail.host)、setSmtpPort、setAuthenticator(账号口令认证)、setSSLOnConnect(SSL 连接开关)、setFrom/addTo/setSubject/setMsg/send(来源:userguide.html《A simple text email》,查询日期 2026-10-18)。

3.3 附件与图片模型

EmailAttachment 通过 setPath/setDisposition/setDescription/setName 描述附件,MultiPartEmail.attach() 添加;ImageHtmlEmail 会把 HTML 中的图片引用转换为内嵌图片(来源:userguide.html《Sending emails with attachments》《HTML formatted email》节,查询日期 2026-10-18)。

四、功能特性

特性说明官方来源
纯文本/HTML 邮件SimpleEmail、HtmlEmail 两个层级组件主页类族说明
附件MultiPartEmail + EmailAttachment,MIME 编码userguide.html
内嵌图片HtmlEmail embed;ImageHtmlEmail 自动转换图片引用组件主页 + userguide.html
SMTP 认证DefaultAuthenticator 账号口令userguide.html
SSL 连接setSSLOnConnect 开关userguide.html
双命名空间路线2.0 线提供 javax/jakarta 双实现模块组件主页

⚠️ 注意:Commons Email 只覆盖"发送";收信、协议级文件夹管理需直接使用 JavaMail/Jakarta Mail API(官网定位声明即以 sending 为边界,查询日期 2026-10-18)。

五、快速上手

5.1 Maven 依赖

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-email</artifactId>
    <version>1.6.0</version>
</dependency>

来源:Maven Central 坐标 org.apache.commons:commons-email:1.6.0(https://central.sonatype.com/artifact/org.apache.commons/commons-email ,查询日期 2026-10-18)。新项目若要面向 Jakarta 命名空间,可评估 2.0 里程碑版 commons-email2-jakarta(官网组件主页)。

5.2 官方示例:发送一封文本邮件

以下代码引自官方用户指南《A simple text email》(https://commons.apache.org/proper/commons-email/userguide.html ,查询日期 2026-10-18):

Email email = new SimpleEmail();
email.setHostName("smtp.googlemail.com");
email.setSmtpPort(465);
email.setAuthenticator(new DefaultAuthenticator("username", "password"));
email.setSSLOnConnect(true);
email.setFrom("user@gmail.com");
email.setSubject("TestMail");
email.setMsg("This is a test mail ... :-)");
email.addTo("foo@bar.com");
email.send();

带附件的邮件(官方示例骨架,来源:userguide.html《Sending emails with attachments》):

// 创建附件
EmailAttachment attachment = new EmailAttachment();
attachment.setPath("mypictures/john.jpg");
attachment.setDisposition(EmailAttachment.ATTACHMENT);
attachment.setDescription("Picture of John");
attachment.setName("John");

// 创建多部分邮件并挂载附件
MultiPartEmail email = new MultiPartEmail();
email.setHostName("mail.myserver.com");
email.addTo("foo@bar.com", "John Doe");
email.setFrom("me@apache.org", "Me");
email.setSubject("The picture");
email.setMsg("Here is the picture you wanted");

// 添加附件并发送
email.attach(attachment);
email.send();

💡 说明:本文为认知篇,示例均引自官方文档原文,未做本地运行验证;2.0 线的包名前缀为 org.apache.commons.mail2.*(官网 userguide 导入示例)。

六、适用场景与限制

适用场景:

  • 应用内的邮件通知类需求:注册验证码、告警推送、报表投递等一次成型的 MIME 消息;
  • 希望以极小代码量封装 SMTP 细节(认证、SSL、multipart 编码)的中小型项目;
  • 维护在 javax 命名空间、暂时无法整体升级 Jakarta Mail 的存量系统。

限制:

  • 只发不收,收件场景需原生 JavaMail/Jakarta Mail;
  • 1.6.0 发布于 2023-12,2.0 线自 2024-06 的 2.0.0-M1 后无正式版,Jakarta 迁移尚未收尾(Maven Central/官网实查,2026-10-18);
  • 模板渲染、异步批量发送、DKIM/SMIME 等高级能力不在其范围内;
  • 现代邮件服务商普遍要求 OAuth2 等认证方式,官方文档示例以账号口令为主,接入前需评估认证方式兼容性。

七、同类选型对比

以下竞品数据均于 2026-10-18 联网查证:版本与发版日期取自 GitHub Releases;star 数取自 GitHub 仓库 API。

维度Commons Email 1.6.0Jakarta Mail(mail-api 2.1.5)Simple Java Mail 8.12.6Spring Mail(spring-context-support)
许可Apache-2.0EPL-2.0 / GPL-2.0 with Classpath Exception(Jakarta EE 标准双许可)Apache-2.0Apache-2.0
最新版/发版时间1.6.0(2023-12,Maven Central;2.0.0-M1 里程碑 2024-06)2.1.5 Final(2025-09,GitHub Release)8.12.6(2025-04,Maven Central)随 Spring Framework 7.0.9(2026-08,GitHub Release)
社区活跃度ASF 官方项目,GitHub 只读副本 + JIRA 协作285★(GitHub API,jakartaee/mail-api),Eclipse 治理1,294★(GitHub API),迭代活跃53,053★(GitHub API,spring-framework 仓库)
版本节奏维护模式,1.x 低频;2.0 未落地随 Jakarta EE 平台年度演进高频小版本随 Spring Framework 半年特性版 + 补丁
兼容矩阵Java 8+(官网),javax 命名空间Jakarta EE 10 对应 2.1.x 线面向 Jakarta Mail 的 smtp 封装,功能面广(DKIM/SMIME/OAuth2 等,见仓库 topics)与 Spring 体系绑定
定位差异发送型简化 API底层标准 API(收发全能)人类友好 builder + 安全/代理/批量等增强Spring 集成层(JavaMailSender 抽象)

选型建议:Spring 项目直接用 Spring Mail 的 JavaMailSender;需要 DKIM/SMIME/OAuth2/代理等进阶能力选 Simple Java Mail;要完整收发与协议控制用 Jakarta Mail 原生 API;Commons Email 适合轻量发送与存量 javax 系统维护,引入前先确认 2.0 线进展。

八、参考链接

  1. Apache Commons Email 组件主页:https://commons.apache.org/proper/commons-email/
  2. 用户指南:https://commons.apache.org/proper/commons-email/userguide.html
  3. 下载页:https://commons.apache.org/email/download_email.cgi
  4. Maven Central:https://central.sonatype.com/artifact/org.apache.commons/commons-email
  5. GitHub 只读副本:https://github.com/apache/commons-email
  6. 竞品来源:https://github.com/jakartaee/mail-api 、https://github.com/bbottema/simple-java-mail 、https://spring.io/projects/spring-framework