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

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

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

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

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

【问题讨论】:

    标签: java testing email mail-server


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      我发现 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();
        

        【讨论】:

          猜你喜欢
          • 2011-03-06
          • 2012-02-24
          • 2019-02-07
          • 1970-01-01
          • 2018-06-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-06-04
          相关资源
          最近更新 更多