利用 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) 并且相同的单元测试按预期运行,只设置一次收件人。