GreenMail не возвращает адреса получателей BCC

Я использую GreenMail в тесте, чтобы убедиться, что наше приложение правильно отправляет электронную почту.

Я запускаю GreenMail с помощью:

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

У меня есть отдельный процесс, который отправляет электронное письмо на SMTP-сервер GreenMail (это часть интеграционного теста), поэтому мой тестовый код ожидает электронное письмо с помощью:

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. Я проверил, что мое приложение отправляет электронное письмо на один адрес в поле BCC.

Любая идея, почему я не вижу адрес электронной почты получателя?


person Stephen M -on strike-    schedule 25.10.2017    source источник


Ответы (1)


Я нашел ответ в этом блоге:

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

Короткая версия заключается в использовании пользователя и получении сообщения из его почтового ящика вместо получения сообщения с сервера в целом. Тогда вы знаете, что оно пришло на этот адрес электронной почты.

GreenMailUser user = mailServer.setUser("[email protected]", "");
MailFolder inbox = mailServer.getManagers().getImapHostManager().getInbox(user);
for(StoredMessage message : inbox.getMessages()) {
   // Verify the messages
}
person Stephen M -on strike-    schedule 25.10.2017
comment
С помощью этого метода я получаю почту как получатель BCC, но поле BCC получателя по-прежнему равно нулю. Но, может быть, так и должно быть? Потому что приемник BCC такой секретный? - person Codev; 07.02.2020