我如何测试Spring的JavaMailSender

Jor*_*.S. 10 java spring jakarta-mail character-encoding java-ee

我有一个注入了JavaMailSender的服务.我的服务配置它并发送邮件.我想拦截原始邮件以确保信息是正确的.我想在JUnit中做到这一点.

你们会怎么做?

@Service
public class MyServiceImpl {

    @Autowired
    private JavaMailSender _mailSender;

    public void sendMail(String to, String body, String subject){
        ...
        _mailSender.something
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

dim*_*sli 22

我使用GreenMail完成了它.看看我的博客文章,你也可以找到一个有效的例子.


Tru*_*Dub 5

您可以使用测试SMTP服务器,如Dumbster.请参阅以下示例:

@Test
    public void sendSimpleEmailWithCC() {
        // Runs a Dumbster simple SMTP server - default config
        SimpleSmtpServer server = SimpleSmtpServer.start();
        String from = "whoever@from.com";
        String to = "whoever@to.com";
        String messageText = "Good message";
        String title = "Test message";
        String cc = "whoever@cc.com";
        Assert.assertTrue(mailSender
                .sendEmail(from, to, cc, title, messageText));
        server.stop();
        Assert.assertTrue(server.getReceivedEmailSize() == 1);
        Iterator emailIter = server.getReceivedEmail();
        SmtpMessage email = (SmtpMessage) emailIter.next();
        Assert.assertTrue(email.getHeaderValue("From").equals(from));
        Assert.assertTrue(email.getHeaderValue("To").equals(to));
        Assert.assertTrue(email.getHeaderValue("Cc").equals(cc));
        Assert.assertTrue(email.getHeaderValue("Subject")
                .equals("Test message"));
        Assert.assertTrue(email.getBody().equals(messageText));
    }
Run Code Online (Sandbox Code Playgroud)