2

利用 GreenMail 运行 JUnit 测试用例来进行一些基本的电子邮件验证。尝试验证RecipientType.TO时遇到问题。我的 JUnit 断言失败 - 所以我记录了消息头,看起来收件人实际上被设置了两次。

这是我正在运行的示例单元测试:

@Autowired
private JavaMailSender mailSender;

private GreenMail greenMail;

@Before
public void setUp() {
    // GreenMail config
    greenMail = new GreenMail(ServerSetupTest.SMTP);
    greenMail.start();
}

@Test
@DirtiesContext
public void testEmail() throws Exception {
    SimpleMailMessage message = new SimpleMailMessage();
    String testFrom = "from@test.com";
    String testTo = "to@test.com";
    String testSubject = "Test Subject";
    String testText = "Test Text";

    message.setFrom(testFrom);
    message.setTo(testTo);
    message.setSubject(testSubject);
    message.setText(testText);
    mailSender.send(message);

    Message[] messages = greenMail.getReceivedMessages();
    assertEquals(1, messages.length);
    assertEquals(testSubject, messages[0].getSubject());
    assertEquals(testText, GreenMailUtil.getBody(messages[0]));
    assertEquals(testFrom, GreenMailUtil.getAddressList(messages[0].getFrom()));
    assertEquals(testTo, GreenMailUtil.getAddressList(messages[0].getRecipients(Message.RecipientType.TO)));
}

我注销了标头,发现它包含两个RecipientType.TO实例(Received、Message-ID、Date 字段混淆):

 Return-Path: <from@test.com>
 Received: from localhost
 Date: 12345678
 From: from@test.com
 To: to@test.com
 To: to@test.com
 Message-ID: <----------->
 Subject: Test Subject
 MIME-Version: 1.0
 Content-Type: text/plain; charset=us-ascii
 Content-Transfer-Encoding: 7bit

关于为什么To:看起来要设置两次的任何想法?

我发现不使用GreenMailUtil.getAddresList(),显式返回收件人并检查第一个元素是有效的,例如:

 Address[] recipientTo = messages[0].getRecipients(Message.RecipientType.TO);
 assertEquals(testTo, recipientTo[0].toString());

但我想尝试了解为什么 GreenMail 看起来要设置收件人地址两次。

干杯!

更新

上述问题是使用 GreenMail 版本 1.3.1b 运行的。根据@Roland Weisleder 的建议,更新到最新版本的 GreenMail (1.5.3) 并且相同的单元测试按预期运行,只设置一次收件人

4

0 回答 0