使用Spring Boot和Thymeleaf发送HTML电子邮件

时间:2017-03-13 09:11:51

标签: java spring email spring-boot smtp

我正在查看如何使用Spring Boot发送电子邮件。 使用标准Spring Boot模块发送电子邮件,并使用Thymeleaf模板引擎为消息准备HTML内容。 这是我使用的依赖项

referenceName.WebService1 ws = new referenceName.WebService1();
ws.doThingsMethod();

这是我的MailClient

 <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.icegreen</groupId>
            <artifactId>greenmail</artifactId>
            <version>1.5.0</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <!-- Import dependency management from Spring Boot -->
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

这是我的测试类

@Service
public class MailClient {

    private JavaMailSender mailSender;
    private MailContentBuilder mailContentBuilder;

    @Autowired
    public MailClient(JavaMailSender mailSender, MailContentBuilder mailContentBuilder) {
        this.mailSender = mailSender;
        this.mailContentBuilder = mailContentBuilder;
    }

    public void prepareAndSend(String recipient, String message) {
        MimeMessagePreparator messagePreparator = mimeMessage -> {
            MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage);
            messageHelper.setFrom("amadeu.cabanilles@gmail.com");
            messageHelper.setTo("amadeu.cabanilles@gmail.com");
            messageHelper.setSubject("Sample mail subject");
            String content = mailContentBuilder.build(message);
            messageHelper.setText(content, true);
        };
        try {
            mailSender.send(messagePreparator);
        } catch (MailException e) {
            e.printStackTrace();
        }
    }
}

在我的电脑上执行测试没问题,我通过测试但没有收到任何电子邮件。

1 个答案:

答案 0 :(得分:4)

您没有收到任何电子邮件,因为此集成测试使用本地测试SMTP服务器存根 - GreenMail。该测试不会发送真实的电子邮件,只有在生产中有真正的SMTP服务器时才会验证邮件是否已准备好并正确发送。

要从本地环境发送电子邮件,您需要设置一些SMTP服务器,但是,如果实际发送邮件,则自动验证是完全不同的故事。