flask-mail异步发送邮件_16springboot系列: 邮件模版

fed6600c91384ef1dde20fdc54662875.gif

      在生活中我们经常会遇到,注册完网站后会收到一份邮件,只有当我们点击了邮件中的激活链接才能正常登录网站。

邮件模版通常如下:

尊敬的XXX用户:                        恭喜您注册成为xxx网的用户,同时感谢您对xxx的关注与支持,请点击“激活认证”。

        这里用户名和激活链接是变化的,其他邮件内容均不变,如果每次发送邮件都需要手动拼接的话会不够优雅,并且每次模板的修改都需要改动代码的话也很不方便,因此对于这类邮件需求,都建议做成邮件模板来处理。模板的本质很简单,就是在模板中替换变化的参数,转换为 html 字符串即可,这里以thymeleaf为例。

1、pom配置thymeleaf 

<dependency>  <groupId>org.springframework.bootgroupId>  <artifactId>spring-boot-starter-thymeleafartifactId>dependency>

2、创建模版        

<html lang="zh" xmlns:th="http://www.thymeleaf.org">    <head>        <meta charset="UTF-8"/>        <title>激活验证title>    head>    <body>        您好,这是验证邮件,请点击下面的链接完成验证,<br/>        <a href="#" th:href="@{ http://www.zlcxy.top/user/jihuo/{id}(id=${id}) }">激活账号a>    body>html>

3、解析模版并发送

    @Override    public void sendTemplateMail(String to, String subject,Map<String,Object> map) {        //创建邮件正文        Context context = new Context();        for (Map.Entry<String,Object>  entry :  map.entrySet()) {            context.setVariable(entry.getKey(), entry.getValue());        }        String emailContent = templateEngine.process("emailTemplate", context);        sendHtmlMail(to,subject,emailContent);    }

4、测试邮件模版

    @Test    public void testTemplateMail() throws Exception {        Map<String, Object> map = new HashMap<>();        map.put("id","001");        mailService.sendTemplateMail("1796969389@qq.com","test template mail", map);    }

5、运行结果

2020-06-12 07:59:59.315  INFO 7728 --- [           main] c.example.service.impl.MailServiceImpl   : html邮件发送成功

d2bd609260db18b113ce452d94612b18.png

5、重试机制

    生产中,会因各种原因导致邮件发送失败,例如:邮件发送过于频繁,网络异常等。这种情况下,我们需要考虑邮件发送的重试机制。

实现思路:

1、发送邮件前记录数据库,并登记发送状态为未发送。2、调用发送邮件接口,将结果更新发送状态。3、定时任务扫描结果状态为失败的,且重试次数小于3,每次重试将更新重试次数值。

6、异步机制

        很多时候发送邮件并不是我们的主要的关注的业务,如通知类、提醒类邮件发送,这些可以允许延时或失败,可以采用异步发送,加快主交易执行速度。实际项目中可以采用MQ等第三方中间件来做异步机制处理。

源码获取:

关注公众号,输入"springboot-parent"获取git地址

[20200407] 12-springboot系列:Mybatis的xml使用

[20200607] 13-springboot系列:定时任务

[20200608] 14-springboot系列: 邮件发送

[20200609] 15-springboot系列: 邮件发送2

作者微信号:13128600812

加入技术群讨论,备注:1

软件定制及其他业务,备注:2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值