• 【nodemailer】之 work with mustache


    之前对nodemailer做了简要的研究,基本上是搞定了发邮件的问题。但很多情况下邮件的内容不是固定的,然后又需要有一个合适的样式,这就需要使用模板了。nodemailer有nodemailer-markdownnodemailer-express-handlebars俩个插件,分别支持markdown语法和handlebars的语法,理论上handlebars也支持mustache模板,但是去看了看nodemailer-express-handlebars的用法,不是很喜欢。另外邮件采用markdown的风格不是很好,而且设不了邮件背景,不过适合发有代码片段的邮件。

    为解决上面的问题,自己包装了一下mustache,取名mustache-promise,下面就展示一下如借助这个模块渲染mustache模板作为邮件内容.

    代码

    • 项目结构

    • 主文件代码

     //Created By zj on 2015/10/3 
     var nodemailer = require('nodemailer');
     var smtpPool=require("nodemailer-smtp-pool");
     var Mustache=require("mustache-promise");
     var path=require("path");
     var options={
        "service":"QQ",
        "auth":{
            "user":"xxxxx@qq.com",
            "pass":"xxx"
        },
        "maxConnections":10,
        "secure":true
     };
     var transporter = nodemailer.createTransport(smtpPool(options));
     var mst_pro=new Mustache();
     //设置模板文件所在目录,看上面的项目结构;设置文件扩展名为 .mst;load()从文件加载模板内容
     mst_pro.dir(path.join(__dirname,"./views")).extName(".mst").load("base",{"by":"footer"});
     var sendEmail=function(info){
        mst_pro.ok().then(function(){
            transporter.sendMail({
                from:'xxxxx@qq.com',
                to: 'yyyyyy@163.com',
                subject: '吐槽',
                html:mst_pro.render(info)//以info中的数据渲染模板,输出的是html格式的内容
            },function(err,res){
                if(err){
                    console.log(err);
                }else{
                    console.log(res);
                }
            });
    
        });
     }
     var information={
            "title":"A股小评",
            "comments":[{
                "comment":"A股就像一个小娃娃一样,一跌就跌停,一涨就涨停,一点都不稳重!",
                "byWho":"zj"
             },{
                 "comment":"A股就是世界股市的一个奇葩,经常千股跌停千股涨停,不带这样的,经常做过山车会得心脏病的",
                 "byWho":"yyrdl"
             },{
                 "comment":"不知道新的韭菜有没有长好,准备去割韭菜了,哈哈",
                 "byWho":"you guess:)"
             }]
      };
     sendEmail(information);
    
    • base.mst
    <h3 style="max-100px;margin-left:auto;margin-right:auto">{{title}}</h3>
    {{#comments}}
        <div style="background-color:skyblue;padding:10px;margin-top:10px;border-radius:3px;">
          <p style="font-size: 14px">{{comment}}</p>
          {{>by}}
        </div>
    {{/comments}}
    
    • footer.mst
     <div style="margin-left: 600px;font-style: italic;">
         -----{{byWho}}
     </div>
    

    效果截图




    如果你想在邮件中加背景图,其实很简单,参照之前那边文章中的逻辑就可以了,理论上讲加音乐也可以,我试试 :)--结果是显示出了audio标签,但显示不支持该类文件,失败!

    mustache-promise的用法在文档里面有详细的介绍

    ---记录,分享。转载请注明出处!

  • 相关阅读:
    jquery判断元素是否可见隐藏
    jQuery的replaceWith()函数用法详解
    前端工作面试问题
    Windows下安装sass和compass失败的解决办法
    马尾图案之canvas的translate、scale、rotate的方法详解
    boost bimap
    boost multi index
    boost regex expression
    boost format
    boost lexical_cast
  • 原文地址:https://www.cnblogs.com/yyrdl/p/4853528.html
Copyright © 2020-2023  润新知