SpringBoot +Mail+FreeMarker
-
添加依赖
-
<!-- 邮件所需依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> <!-- Spring Boot Freemarker 依赖,发送HTML格式的邮件的方式 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency>
-
配置properties文件
##邮件系统 #启用邮件运行状况检查。 management.health.mail.enabled = false spring.mail.host = mail.yto.net.cn spring.mail.jndi-name = spring.mail.port = 25 spring.mail.username = 用户名(发邮件账户) spring.mail.password = 密码 (发邮件账户密码) spring.mail.properties.mail.smtp.auth = true spring.mail.properties.mail.smtp.starttls.enable = false spring.mail.properties.mail.smtp.starttls.required = false #模板加载路径 spring.freemarker.template-loader-path = classpath:static/template/ #模板文件后缀 spring.freemarker.suffix = .ftl spring.freemarker.enabled = true spring.freemarker.cache = false spring.freemarker.charset = UTF-8 spring.freemarker.content-type = text/html spring.freemarker.allow-request-override = false #是否需要检查模板路径是否存在 spring.freemarker.check-template-location = true spring.freemarker.expose-request-attributes = false spring.freemarker.expose-session-attributes = false spring.freemarker.expose-spring-macro-helpers = false
-
编写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("xxxxx@163.com"));//发送给谁 helper.setSubject("【" + title + "-" + LocalDate.now() + " " + LocalTime.now().withNano(0) + "】");//邮件标题 Map<String, Object> 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 (Exception e) { e.printStackTrace(); } } }
-
定义发送邮件对象
发送内容为object,我这里演示一个对象,通过模板渲染方式接收内容
@Data
public class Message {
private String messageCode;
private String messageStatus;
private String cause;
}
-
在项目templates目录新建个message.ftl文件
<!DOCTYPE html> <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>MessageCode</th> <th>MessageStatus</th> <th>Cause</th> </tr> <tr> <td>${(params.messageCode)!""}</td> <td>${(params.messageStatus)!""}</td> <td>${(params.cause)!""}</td> </tr> </table> </div> </body> </html>
-
测试邮件发送
@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"); } }