GreenMail:电子邮件服务器测试套件


如果你用Java发送电子邮件,那么GreenMail应该是你工具箱中的一个工具。

GreenMail允许开发人员测试基于电子邮件的应用程序、服务或系统,而无需访问实时邮件服务器。
支持 SMTP、POP3 和 IMAP 的轻量级沙盒电子邮件服务器开源套件。

开发人员可以通过将 GreenMail 嵌入单元测试或将其作为独立容器运行来发送、接收和验证电子邮件。
GreenMail 充当虚拟(模拟/沙箱)邮件服务器,支持常见邮件协议 SMTP、IMAP 和 POP3。

GreenMail 在以下场景中很有用:
1、测试您的发送代码

  • 系统测试应用程序。GreenMail 像常规 SMTP 服务器一样进行响应,但不发送任何电子邮件,这使其能够在现实生活应用程序和实际测试用例中使用。消息可以轻松提取、验证和修改。已启用对 SMTPS (SSL) 的支持。
  • 对于需要以简洁、高效(非轮询)方式发送电子邮件以等待消息到达、检索、验证和修改消息的单元测试代码来说,GreenMail 是一个绝佳的选择。
  • 请注意,可以使用简单的 java 方法或通过提供的 POP3、IMAP 检索器帮助程序类来检索电子邮件。或者,您可以使用本地客户端,例如Thunderbird

2、测试您的检索代码

  • GreenMail 再次可用于系统或单元测试需要使用 POP3 或 IMAP 的应用程序,通过像符合标准的 POP3 或 IMAP 服务器一样进行响应。还启用了对 POP3S 和 IMAPS (SSL) 的支持。
  • 邮件可以直接放入用户邮箱或使用 SMTP。
  • GreenMail 附带了用于发送和检索的帮助程序类。

简单代码:

/** See code on GitHub */
GreenMail greenMail = new GreenMail();
//uses test ports by default
greenMail.start();
GreenMailUtil.sendTextEmailTest(
"to@localhost", "from@localhost", "some subject",
                               
"some body"); // --- Place your sending code here
assertEquals(
"some body", greenMail.getReceivedMessages()[0].getContent());
greenMail.stop();

为您的开发环境模拟邮件服务器
GreenMail 提供了 JBoss GreenMail 服务,用于模拟邮件服务器进行开发。它可以节省您安装完整的高效服务器(如Apache James )的开销。

为什么不需要创建任何帐户来发送/检索?
默认情况下,GreenMail 接受所有传入电子邮件。如果没有对应的现有电子邮件帐户,则会自动创建一个帐户,其登录名和密码与收件人地址相同。

依赖哪些库包?
查看Maven POM。依赖项包括

  • javamail.jar和activation.jar
  • slf4j-api.jar(用于日志记录)
  • junit.jar(用于测试规则)

为什么不需要安装任何 SSL/TLS 相关证书?
GreenMail 设计为开箱即用,无需生成、签署或安装任何证书到您的密钥库中。GreenMail 附带带有自签名 RSA 密钥的内置密钥库。 具体可以参考DummySSLServerSocketFactory的源码 。

如何创建或删除邮件用户?

GreenMail greenMail = ...
// Create user with login id equals email
GreenMailUser user1 = greenMail.setUser(
"foo@localhost", "some secret pwd");
// Create user with login id different than email
GreenMailUser user2 = greenMail.setUser(
"foo@localhost", "login-id", "some secret pwd");
...
greenMail.getManagers().getUserManager().deleteUser(user1);
// Delete user

应用程序编程接口
GreenMail 提供了一个 RESTful API,专注于管理任务,例如清除邮件或添加用户。
运营包括

  • 获取当前配置的用户并添加新用户
  • 获取当前配置(例如 SMTP 等服务在哪个端口上运行)
  • 清除所有邮箱中的电子邮件
  • 将 GreenMail 重置为原始配置(重新启动服务器,清除通过 API 添加的所有邮件和用户)

下载