1.加入pom文件
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency>
2.修改application.properties文件
# JavaMailSender 邮件发送的配置 #spring.mail.host=smtp.163.com #163 有点坑 会有554错误 spring.mail.host=smtp.qq.com #你的邮箱 spring.mail.username=****@qq.com# #要通过申请开通(进入qq邮箱-》设置-》账户-》POP3服务:开启POP3/SMTP服务) spring.mail.password=dzagtxicxzurbgia spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.starttls.enable=true spring.mail.properties.mail.smtp.starttls.required=true #模板引擎配置 spring.freemarker.allow-request-override=false spring.freemarker.cache=true spring.freemarker.check-template-location=true spring.freemarker.charset=UTF-8 spring.freemarker.content-type=text/html spring.freemarker.expose-request-attributes=false spring.freemarker.expose-session-attributes=false spring.freemarker.expose-spring-macro-helpers=false
3.编写MailUtil类
package com.basewin.tms.servlet; import freemarker.template.Template; import freemarker.template.TemplateException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.stereotype.Component; import org.springframework.ui.freemarker.FreeMarkerTemplateUtils; import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer; import javax.mail.MessagingException; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import java.io.IOException; import java.time.LocalDate; import java.time.LocalTime; import java.util.HashMap; import java.util.Map; @Component public class MailUtil { //邮件的发送者 @Value("${spring.mail.username}") private String from; //注入MailSender @Autowired private JavaMailSender mailSender; //发送邮件的模板引擎 @Autowired private FreeMarkerConfigurer configurer; /** * @param params 发送邮件的主题对象 object * @param title 邮件标题 * @param templateName 模板名称 */ public void sendMessageMail(Object params, String title, String templateName, String user) { try { MimeMessage mimeMessage = mailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true); helper.setFrom(from); helper.setTo(InternetAddress.parse(user));//发送给谁 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 (TemplateException e) { e.printStackTrace(); } } catch (IOException e) { e.printStackTrace(); } } catch (MessagingException e) { e.printStackTrace(); } } }
4.编写MailController类
package com.basewin.tms.controller; import com.basewin.tms.entity.MailMessage; import com.basewin.tms.servlet.MailUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class MailController { @Autowired private MailUtil mailUtil; @GetMapping("/send") public String send(String test){ MailMessage message = new MailMessage(); message.setMessageCode("七夕主题"); message.setMessageStatus("啪啪啪活动"); message.setCause(test); mailUtil.sendMessageMail(message, "测试消息通知", "email.ftl","*****@qq.com"); return "1"; } }
5.编辑模板
在resources文件下创建templates文件夹,加入文件email.ft,内容为:
<!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>主题</th> <th>介绍</th> <th>内容</th> </tr> <tr> <td>${(params.messageCode)!""}</td> <td>${(params.messageStatus)!""}</td> <td>${(params.cause)!""}</td> </tr> </table> </div> </body> </html>
6.效果
请求http://localhost:8081/send?test=***