我正在测试将邮件从邮箱中取出的应用程序,根据该邮件的内容执行某些操作,然后根据操作的结果发送响应邮件。
我正在寻找一种为此应用程序编写测试的方法。理想情况下,我希望这些测试能够启动自己的邮件服务器,将我的测试电子邮件推送到此邮件服务器上的文件夹,并让我的应用程序将邮件从我的测试开始的邮件服务器中删除。
配置应用程序以使用邮件服务器并不困难,但我不知道在哪里寻找以Java编写邮件服务器的编程方式。我看过JAMES,但我无法弄清楚如何从我的测试中启动服务器。
所以问题是:我可以在Java中使用什么来配置和完全在Java中启动?
答案 0 :(得分:11)
还有一个非常简单的使用GreenMail,它被设计为自动“单元”测试的邮件服务器。
来自项目网页(现在可能还有其他一些具有发送/接收功能的工具):
GreenMail是一个开源的,直观的 和易于使用的电子邮件测试套件 服务器用于测试目的。支持 带SSL插槽的SMTP,POP3,IMAP 支持。 GreenMail还提供了一个 JBoss GreenMail服务。 GreenMail是 提供的拳头和唯一的图书馆 接收的测试框架 并从Java检索电子邮件。
答案 1 :(得分:4)
我之前在单元测试中使用了Dumbster和SubEthaSmtp来测试发送电子邮件的代码。
我发现Dumbster更容易使用。
答案 2 :(得分:0)
看看JES,似乎做你想做的事。
答案 3 :(得分:0)
Dumbster:快速安装!但无法处理邮件附件。身体末端只有字符串,必须单独解析。
所以现在我正在尝试另一个框架
答案 4 :(得分:0)
我在为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();