SpringBoot使用FreeMarker模板发送邮件

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("[email protected]"));//发送给谁
          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");
       }
      }
    

猜你喜欢

转载自blog.csdn.net/weixin_39248420/article/details/88997599
今日推荐