• 150455

    文章

  • 1009

    评论

  • 13

    友链

  • 最近新加了换肤功能,大家多来逛逛吧~~~~
  • 喜欢这个网站的朋友可以加一下QQ群,我们一起交流技术。

spring boot 发送 thymeleaf 模板邮件


    网站开发过程中需要一个注册验证机制,考虑到短信需要购买服务,选择了邮件激活机制

    首先是maven引入依赖包

    mail 包是 spring 封装的 mail 邮件包,本质上和 javamail 是一样的

	    <!-- 添加spring-boot-starter-mail包引用 -->

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-mail</artifactId>
		</dependency>

		<!--thymeleaf 模板技术 用于发送邮件-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-thymeleaf</artifactId>
		</dependency>

 

配置邮件服务器和thymeleaf


spring:
    mail:
      protocol: smtp
      host: smtp.qq.com

      # 自己的qq邮箱账号
      username: xxxx@qq.com

      #  password 换成腾讯给的QQ授权码     
      password: xxxx

      default-encoding: UTF-8
      properties:
        mail:
          smtp:
            auth: true
            starttls:
              enable: true
              required: true
    thymeleaf:
       cache: false
       prefix: classpath:/templates/
       suffix: .html
       encoding: UTF-8
       content-type: text/html
       mode: HTML5

需要注意的是,博主用的是 qq 邮箱发送,需要在qq邮箱中开启 POP3/SMTP 服务

具体步骤如下



接下来编写一个模板生成工具类方法

    /**
     *
     * @param dataMap 渲染数据原
     * @param TemplatesName 模板名
     * @param templateEngine   模板操作类
     * @return
     */
    public static String createTemplates(Map<String,String> dataMap,String TemplatesName,TemplateEngine templateEngine){

        //context 对象用于注入要在模板上渲染的信息
        Context context = new Context();
        context.setVariables(dataMap);
        String emailText = templateEngine.process("emailTemplates",context);
        System.out.println(emailText);
        
        //返回模板源代码 String 类型
        return emailText;
    }

EmailService类

@Service
public class EmailServiceImpl implements EmailService{


    //发送邮件的用户名
    @Value("${spring.mail.username}")
    private String sender;

    //模板引擎对象
    @Autowired
    private TemplateEngine templateEngine;

    @Autowired
    private JavaMailSender javaMailSender;

   /**
     *
     * @param activationUrl 激活url
     * @param Addressee 收件人用户名
     */
    @Override
    public void sendEmail(String activationUrl,String Addressee) {
        //消息处理类
        MimeMessage message = javaMailSender.createMimeMessage();

        /**
         *      dataMap 用于存储模板渲染所需要的数据
         *      用法和model 一致
         *      dataMap 的 key 对应模板中渲染数据的命名
         */
        Map<String,String> dataMap = new HashMap<>();
        dataMap.put("title","用户名激活");
        dataMap.put("url",activationUrl);

        //获取生成的模板
        String emailText = TemplatesUtil.createTemplates(dataMap,"emailTemplates.html",templateEngine);
        try {
            //消息处理助手对象
            MimeMessageHelper helper = new MimeMessageHelper(message, true);

            //设置发件人
            helper.setFrom(sender);
            
            //设置收件人
            helper.setTo(Addressee);
            
            //设置邮件标题
            helper.setSubject("主题:用户名激活");
            
            //设置邮件内容 ,true 表示发送html 格式
            helper.setText(emailText, true);
            
        } catch (MessagingException e) {
            throw new RuntimeException("Messaging  Exception !", e);
        }
        javaMailSender.send(message);
    }
}

最后只要在controller 中调用 EmailService 的方法就可以发送邮件了


695856371Web网页设计师②群 | 喜欢本站的朋友可以收藏本站,或者加入我们大家一起来交流技术!

2条评论

Loading...
  • ceshiHouston1211L

    希望继续大师讲了个故事:“一堆橘子里面有大的、也有小的。让你挑时,不要刻意去挑。你存心挑大的,那是贪利;你存心挑小的,那是贪名。”by https://www.ceshidaan.com/class/suzhou.html

  • chongqingby1112L

    感谢您.这个对我帮助很大



发表评论

电子邮件地址不会被公开。 必填项已用*标注

自定义皮肤 主体内容背景
打开支付宝扫码付款购买视频教程
遇到问题联系客服QQ:419400980
注册梁钟霖个人博客