一、讲一下thymeleaf的简单使用
1.在根路径下写一个 resources/templates/good.html 文件
2. 在代码实现
记得 不要加 @RequestBody这个注解,因为它会把string当作普通 的字符串,而不是去渲染对应的good.html视图
3.看效果
关于图片的显示,我后面写的有,thymeleaf 可以使用 @{/} 来对图片进行匹配
4.拓展一下,在 代码中自定义文字,并在html渲染
这是要用到 Model , model.addAtrributes() 来对其中 th:txt 进行渲染
对应的good.html
对应的页面
二、在邮件发送时,不使用Model,而是用另一种方式
在往 邮件 中添加 图片,要用到 cid
我先举个示例代码,看不懂也没关系,摸索一会。。。。。。
下面这段代码,实现了发送 验证码,以及往邮件中添加图片。
@GetMapping("sendEmail/{to}")@ResponseBodypublic String sendEmail(@PathVariable String to ,@RequestParam("username") String username){Context ctx=new Context();Map<String,Object> variables=new HashMap<>();variables.put("username",username);int codeLen=6;String code=getCode(codeLen);variables.put("code",code);ctx.setVariables(variables);//生成邮箱字符串String content = templateEngine.process("sendCode.html", ctx);MimeMessage mimeMessage = javaMailSender.createMimeMessage();try {MimeMessageHelper helper=new MimeMessageHelper(mimeMessage,true);//设置发送人helper.setFrom(from);//设置收件人helper.setTo(to);//设置主题if (username==null){username="";}helper.setSubject(username+"的邮箱验证码!");helper.setText(content,true);
//从类加载路径中获得ResourceClassPathResource classPathResource=new ClassPathResource("static/wangkantian.jpg");helper.addInline("logoUrl",classPathResource);javaMailSender.send(mimeMessage);} catch (MessagingException e) {log.info("{邮件发送错误}");throw new RuntimeException(e);}log.info("验证码为{}",code);return "success";}
下面来往邮箱里添加一个附件,顺便实现群发 的功能。
还挺有意思的!
@ResponseBody@GetMapping("/sendBachEmail")public String sendBatchEmail(String[]to,String motto){String subject="展信佳";Context context = new Context();context.setVariable("motto",motto);String content = templateEngine.process("good.html", context);MimeMessage mimeMessage = javaMailSender.createMimeMessage();//使用helper 让 mimeMessage设置相关邮件配置更加简便try {//记得开启helper的multipartMimeMessageHelper helper=new MimeMessageHelper(mimeMessage,true);//设置主题内容helper.setSubject(subject);//设置正文内容helper.setText(content,true);//图片resourceClassPathResource imgResource = new ClassPathResource("static/wangkantian.jpg");//附件FileClassPathResource fileResource=new ClassPathResource("static/学习HTML.docx");//添加附件和图片helper.addInline("logoUrl",imgResource);helper.addAttachment("秘密.html",fileResource);//批量发送邮件,此时to是字符串数组helper.setTo(to);//设置发件人helper.setFrom(from);javaMailSender.send(mimeMessage);} catch (MessagingException e) {throw new RuntimeException(e);}return "success";}
三、易出错的点
1. 关于 @
对于我们服务器上的静态资源,比如下面这张图片,是可以直接访问到的。
因此,我们要想在theamleaf中达到同样的效果,就要使用@。
MimeMessage是JavaMail API中的一个类,用于表示电子邮件消息。它可以用来创建并设置邮件消息的各种属性,例如发件人、收件人、主题、内容和附件等。
MimeMessageHelper是Spring Framework中的一个类,它是对MimeMessage进行封装,提供了更加方便的API,以便于我们设置邮件的各种属性。例如,MimeMessageHelper可以帮助我们添加多个收件人、抄送、密送、内嵌图片和附件等。
因此,MimeMessage是JavaMail API中的一个基础类,而MimeMessageHelper是Spring Framework中对MimeMessage的封装,提供了更加便捷的API,使得我们可以更加方便地处理邮件消息。
错误汇总:
1. 遇见@ResponseBody与 String返回值的冲突
Error resolving template [success], template might not exist or might not be accessible by any of the configured Template Resolvers
一般来讲,模板解析时,会根据String类型的返回值,来返回是哪个html页面,但此时,我们只需要返回一个String 类型的数据,那么,我们就用用上@ResponseBody
templateEngine.process("index", ctx); 不奏效
TemplateEngine
需要注入而不能使用new TemplateEngine()
创建新实例,因为创建的新实例没有和TemplateResolver关联,使用process()方法读取文件时只显示文件名而不能解析文件内容。
如果有图片,那么一定要开启 multipart