使用 Java 邮件服务器进行测试

Posted

技术标签:

【中文标题】使用 Java 邮件服务器进行测试【英文标题】:Working with a Java Mail Server for Testing 【发布时间】:2011-02-16 11:23:12 【问题描述】:

我正在测试一个应用程序,该应用程序从邮箱中取出邮件,根据邮件内容执行一些操作,然后根据操作结果发送响应邮件。

我正在寻找一种为此应用程序编写测试的方法。理想情况下,我希望这些测试能够启动他们自己的邮件服务器,将我的测试电子邮件推送到此邮件服务器上的一个文件夹,并让我的应用程序从我的测试开始的邮件服务器中抓取邮件。

将应用程序配置为使用邮件服务器并不难,但我不知道在哪里可以找到用 Java 启动邮件服务器的编程方式。我查看了 JAMES,但无法弄清楚如何从我的测试中启动服务器。

所以问题是这样的:我可以在 Java 中使用什么邮件服务器,我可以完全在 Java 中配置和启动?

【问题讨论】:

【参考方案1】:

看看JES,好像做你想做的。

【讨论】:

【参考方案2】:

我之前在单元测试中使用过Dumbster 和SubEthaSmtp 来测试发送电子邮件的代码。

我发现 Dumbster 更容易使用。

【讨论】:

Charlie 想要测试电子邮件获取,Dumbster 和 SubEthaSmtp 用于发送邮件。 两者都是能够接收电子邮件的电子邮件服务器。 刚刚集成了 SubEthaSmtp(特别是 Wiser SMTP 服务器),看起来很简单。它可以处理附件和内联图像等。很好。 你不能在笨蛋中使用邮件正文。笨蛋是broken。 看来 Dumbster 不太稳定。 SubethaSMTP 团队在 Wiser 项目中重新实现它。【参考方案3】:

GreenMail 的使用也非常简单,它被设计为用于自动“单元”测试的邮件服务器。

来自项目网页(现在可能还有其他一些具有发送/接收功能的工具):

GreenMail 是一个开源的、直观的 和易于使用的电子邮件测试套件 用于测试目的的服务器。支持 带有 SSL 套接字的 SMTP、POP3、IMAP 支持。 GreenMail 还提供了一个 JBoss GreenMail 服务。绿色邮件是 第一个也是唯一一个提供 一个同时接收的测试框架 并从 Java 中检索电子邮件。

【讨论】:

我遇到了问题,Greenmail 神秘地将“收件人”和“抄送”收件人复制到信封的“收件人”列表中,导致我的测试失败。这发生在我向两个“收件人”和一个“抄送”收件人发送电子邮件时。然后我切换到 SubEthaSmtp/Wiser,一切都按预期进行。【参考方案4】:

Dumbster:快速设置!但无法处理邮件附件。正文末尾只有字符串,需要单独解析。

所以现在我正在尝试另一个框架

【讨论】:

【参考方案5】:

Mock-JavaMail 项目

我在为 Jenkins 开发插件时遇到了它,使用它是我的梦想!

只需将drop the dependency 加入您的项目,您就可以开始了(我将告诉Kohsuke explain 如何设置和使用它)。

如果您不耐烦,这里有一个使用方法的简单示例:

示例:

// Setup test: add mail to inbox
Mailbox tmp = Mailbox.get("foo@bar.com");
tmp.add(/* your javax.mail.Message */)
assertEquals 1, tmp.size()

// Connect to the inmemory mailbox using "imap"
Session session = Session.getInstance(System.getProperties(), null);
Store store = session.getStore('imap');
store.connect("bar.com","foo","anything");

// Check the mail exists!
Folder inbox = store.getFolder("INBOX");
inbox.open(Folder.READ_ONLY);
assertEquals 1, inbox.getMessageCount()
store.close();

【讨论】:

以上是关于使用 Java 邮件服务器进行测试的主要内容,如果未能解决你的问题,请参考以下文章

WindowsGUI自动化测试框架搭建-邮件服务模块封装(sendmail)

使用Java程序发送邮件|发送有附件的邮件|进行邮件群发

从原始正文发送邮件以进行测试

如何防止外部实体拒绝来自测试服务器的电子邮件?

如何使用Java发送qq邮件

无法通过SMTP服务器以Java发送邮件