【问题标题】:GreenMail not returning BCC recipient addressesGreenMail 不返回密件抄送收件人地址
【发布时间】:2018-04-07 00:44:05
【问题描述】:

我在测试中使用 GreenMail 来验证我们的应用程序是否正确发送电子邮件。

我用以下方式启动 GreenMail:

GreenMail greenMailServer = new GreenMail(new ServerSetup(port, "localhost", ServerSetup.PROTOCOL_SMTP));
greenMailServer.start();

我有一个单独的进程将电子邮件发送到 GreenMail SMTP 服务器(这是集成测试的一部分),所以我的测试代码等待电子邮件:

long endTime = System.currentTimeMillis() + timeout;
// Get the fake mail server and listen for messages
GreenMail mailServer = ITester.getFakeEMail();
while(System.currentTimeMillis() < endTime)  {
     boolean timedOut = !mailServer.waitForIncomingEmail(endTime - System.currentTimeMillis(), 1);
     if(timedOut) {
          throw new TestFailure(lineNumber, "Timed out waiting for email To: '"+to+"' Subject: '"+subject+"' Body: '"+body+"' .");
     }
     for(MimeMessage message : mailServer.getReceivedMessages()) {
          try {
              StringBuilder errors = new StringBuilder();
              // Check who the message is going to
              //Address[] allRecipients = message.getRecipients(Message.RecipientType.BCC);
              Address[] allRecipients = message.getAllRecipients();

我已经尝试了对 Recipients 和 getAllRecipients 的注释掉请求,但我总是收到 null。我已验证我的应用程序正在将电子邮件发送到密件抄送字段中的一个地址。

知道为什么我没有看到收件人的电子邮件地址吗?

【问题讨论】:

    标签: java email bcc greenmail


    【解决方案1】:

    我在这个博客上找到了答案:

    https://developer.vz.net/2011/11/08/unit-testing-java-mail-code/

    简短的版本是使用用户并从他的收件箱中获取消息,而不是从整个服务器获取消息。然后你就知道它来到了那个电子邮件地址。

    GreenMailUser user = mailServer.setUser("junk@somewhere.com", "");
    MailFolder inbox = mailServer.getManagers().getImapHostManager().getInbox(user);
    for(StoredMessage message : inbox.getMessages()) {
       // Verify the messages
    }
    

    【讨论】:

    • 使用这种方法,我以密件抄送收件人的身份检索邮件,但收件人的密件抄送字段仍然为空。但也许它必须是这样的?因为密件抄送接收方是如此秘密?
    猜你喜欢
    • 2015-01-23
    • 2011-11-20
    • 2015-12-19
    • 2013-12-22
    • 2020-11-05
    • 2015-10-10
    • 2012-04-10
    • 2010-10-13
    • 2012-12-23
    相关资源
    最近更新 更多