springboot+Thymeleaf实现发送Email模板邮件

       在后台服务器中发送邮件已经是一个非常常用的功能了。通常来说虽然HTML并非是一个非常标准的信息格式,但是至少许多邮件客户端都至少支持一部分标记语言。 在这边教程中主要是关于教你如何在Spring Boot 应用中发送邮件以及使用非常简单强大的Thymeleaf模板引擎来制作邮件内容。

发送邮件效果展示:

springboot+Thymeleaf实现发送Email模板邮件_第1张图片

本文支持邮件类型:

  • 纯文本邮件
  • 图片邮件
  • 带附件的邮件

导入pom依赖


		
			org.springframework.boot
			spring-boot-starter-mail
		
		
   			org.springframework.boot
    		spring-boot-starter-thymeleaf
		

邮件服务器属性配置(Properties configuration)

通常情况下,如果所需要的依赖在 class path 中都是可用的话,这时候Spring会自动帮你注册一个默认实现的邮件发送服务 (default mail sender service)spring.mail.host 属性已经被自动定义了, 所有我们所需要做的事情就是把这个属性添加到我们应用的 application.properties 配置文件中。

为了防止springboot项目打包成jar文件之后,读取不到文件,我们把图片和附件都放在服务器指定路径上,直接读取该文件。

#mail
spring.mail.host=smtp.163.com
spring.mail.username=*********@163.com
spring.mail.password=********
spring.mail.properties.mail.smtp.auth=false
spring.mail.properties.mail.smtp.starttls.enable=false
spring.mail.properties.mail.smtp.starttls.required=false
#html template path (resources/templates/email/template.html)
templatePath=email/template
#mail image path
imagePath=D:\\image\\logo.jpg
#imagePath=/neworiental/web/cpbm/image/logo.jpg

邮件发送的工具类

/**
 * 发送邮件工具类
 * @author 
 *
 */
@Component
public class SendEmailUtils {
	private final static Logger logger = LoggerFactory.getLogger(SendEmailUtils.class); 

	@Autowired
	private JavaMailSender javaMailSender;
	@Autowired
	private TemplateEngine templateEngine;

/**
	 * html模板邮件
	 * @param from 发件人
	 * @param to 收件人
	 * @param subject 邮件主题
	 * @param emailParam 给模板的参数 
	 * @param template html模板路径(相对路径)  Thymeleaf的默认配置期望所有HTML文件都放在 **resources/templates ** 目录下,以.html扩展名结尾。
	 * @param imagePath 图片/文件路径(绝对路径)
	 * @throws MessagingException
	 */
	public void thymeleafEmail(String from,String[] to, String subject,EmailParam emailParam,String template,String imgPath) throws MessagingException {
	    MimeMessage mimeMessage =javaMailSender.createMimeMessage();
		MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
		mimeMessageHelper.setFrom(from);
		mimeMessageHelper.setTo(to);
		mimeMessageHelper.setSubject(subject);
		// 利用 Thymeleaf 模板构建 html 文本
		Context ctx = new Context();
		// 给模板的参数的上下文
			ctx.setVariable("emailParam", emailParam);
		// 执行模板引擎,执行模板引擎需要传入模板名、上下文对象
		// Thymeleaf的默认配置期望所有HTML文件都放在 **resources/templates ** 目录下,以.html扩展名结尾。
		// String emailText = templateEngine.process("email/templates", ctx);
		String emailText = templateEngine.process(template, ctx);
		mimeMessageHelper.setText(emailText, true);
		// FileSystemResource logoImage= new FileSystemResource("D:\\image\\logo.jpg");
		//绝对路径
		FileSystemResource logoImage = new FileSystemResource(imgPath);
		//相对路径,项目的resources路径下
		//ClassPathResource logoImage = new ClassPathResource("static/image/logonew.png");
        // 添加附件,第一个参数表示添加到 Email 中附件的名称,第二个参数是图片资源
		//一般图片调用这个方法
		mimeMessageHelper.addInline("logoImage", logoImage);
		//一般文件附件调用这个方法
//		mimeMessageHelper.addAttachment("logoImage", resource);
		javaMailSender.send(mimeMessage);
		
	 }
}

邮件参数实体类EmailParam.java

/**
 * 邮件参数实体类
 * @author 
 *
 */
public class EmailParam {
	private String itemName;//产品名称
	private String stuName;//学生姓名
	private String updateContent;//变更操作
	private String updatePerson;//操作人员
	private String updateDate;//操作时间
	private String remarks;//备注
//省略get、set方法
}

Html模板文件template.html

Thymeleaf的默认配置期望所有HTML文件都放在 **resources/templates ** 目录下,以.html扩展名结尾。

在项目中的路径:**resources/templates/email/template.html

   


    
    
    Siemens Sinnovation
    




前途出国

产品报名系统变更通知:

变更操作:啊啊啊地方规划局快乐靠方法如何加快了开发地方
产品名称:的实际哦按非hi哦发货iOS恶
学生姓名:啊啊啊
操作人员:啊啊啊
操作时间:啊啊啊
Team Member:
查看详情

Controller调用邮件工具类发送邮件

@RestController
@RequestMapping("/test")
public class ItemController {
	
	private final Logger log = LoggerFactory.getLogger(ItemController.class);

	@Value("${spring.mail.username}")
	private String from;
	@Value("${templatePath}")
	private String templatePath;
	@Value("${imagePath}")
	private String imagePath;
	@Autowired
	private SendEmailUtils sendEmailUtils;
	
	/**
	 * email
	 * @param itemIds
	 * @param response
	 */
	@PostMapping(value ="/email", produces = "text/plain;charset=UTF-8")
	public void testEmaili(String itemIds,HttpServletResponse response/*,
			HttpServletRequest request, HttpSession session,
			@RequestHeader("Authorization") String authToken, Principal puser*/) {
		try {
			EmailParam emailParam = new EmailParam();
			emailParam.setStuName("张阿牛");
			emailParam.setItemName("亚太银行账目统计");
			emailParam.setUpdateContent("付款到账");
			emailParam.setUpdatePerson("盖茨");
			emailParam.setRemarks("成功到账");
                         //此处to数组输入多个值,即可实现批量发送
			String [] to={"**********@163.cn"};
			sendEmailUtils.thymeleafEmail(from, to, "这是一封测试邮件主题", emailParam, templatePath, imagePath);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

 

你可能感兴趣的:(springboot+Thymeleaf实现发送Email模板邮件)