SpringBoot使用FreeMarker模板发送邮件

SpringBoot +Mail+FreeMarker

通过spirngboot 自带的mail服务及FreeMarker模板引擎,发送邮

  • 添加依赖
<dependency>
   <groupId>org.springframework.bootgroupId>
   <artifactId>spring-boot-starter-freemarkerartifactId>
dependency>
<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-mailartifactId>
dependency>
<dependency>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-webartifactId>
dependency>

<dependency>
    <groupId>org.projectlombokgroupId>
    <artifactId>lombokartifactId>
    <optional>trueoptional>
dependency>

  • 在application.yml文件中配置Mail信息
spring:
  mail:
    port: 25
    username: ${username}
    password: ${password}
    protocol: smtp
    default-encoding: utf-8
    host: ${host}
  • 编写MailService服务
@Service
public class MailServiceImpl implements MailService {

    //邮件的发送者
    @Value("${spring.mail.username}")
    private String from;

    //注入MailSender
    @Autowired
    private JavaMailSender mailSender;

    //发送邮件的模板引擎
    @Autowired
    private FreeMarkerConfigurer configurer;

    /**
     * @param params       发送邮件的主题对象 object
     * @param title        邮件标题
     * @param templateName 模板名称
     */
    @Override
    public void sendMessageMail(Object params, String title, String templateName) {

        try {

            MimeMessage mimeMessage = mailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
            helper.setFrom(from);
            helper.setTo(InternetAddress.parse("[email protected]"));//发送给谁
            helper.setSubject("【" + title + "-" + LocalDate.now() + " " + LocalTime.now().withNano(0) + "】");//邮件标题

            Map model = new HashMap<>();
            model.put("params", params);
            try {
                Template template = configurer.getConfiguration().getTemplate(templateName);
                try {
                    String text = FreeMarkerTemplateUtils.processTemplateIntoString(template, model);

                    helper.setText(text, true);
                    mailSender.send(mimeMessage);
                } catch (TemplateException e) {
                    e.printStackTrace();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }
}
  • 定义发送邮件对象
    发送内容为object,我这里演示一个对象,通过模板渲染方式接收内容
@Data
public class Message {

    private String messageCode;

    private String messageStatus;

    private String cause;

}
  • 在项目templates目录新建个message.ftl文件

<html>
<head>
    <meta charset="UTF-8">
    <title>消息通知title>
head>

<style type="text/css">
    table {
        font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
        width: 100%;
        border-collapse: collapse;
    }

    td, th {
        font-size: 1em;
        border: 1px solid #5B4A42;
        padding: 3px 7px 2px 7px;
    }

    th {
        font-size: 1.1em;
        text-align: center;
        padding-top: 5px;
        padding-bottom: 4px;
        background-color: #24A9E1;
        color: #ffffff;
    }
style>
<body>
<div>
    <h2>邮件消息通知h2>
    <table id="customers">
        <tr>
            <th>MessageCodeth>
            <th>MessageStatusth>
            <th>Causeth>
        tr>
        <tr>
            <td>${(params.messageCode)!""}td>
            <td>${(params.messageStatus)!""}td>
            <td>${(params.cause)!""}td>
        tr>
    table>
div>
body>
html>
  • 测试邮件发送
    新建controller类

@RestController
public class MailController {

    @Autowired
    private MailService mailService;

    @RequestMapping(value = "/sendMessage", method = RequestMethod.GET)
    public void sendMailMessage() {
        Message message = new Message();

        message.setMessageCode("MissingParameter");
        message.setMessageStatus("Failed");
        message.setCause("缺少参数,请确认");

        mailService.sendMessageMail(message, "测试消息通知", "message.ftl");
    }
}

启动服务访问
http://localhost:8080/sendMessage
查看邮箱
SpringBoot使用FreeMarker模板发送邮件_第1张图片

源码地址: https://gitee.com/wodigeca/springboot-mail

你可能感兴趣的:(springboot)