【nodemailer】之 work with mustache

以前對nodemailer作了簡要的研究,基本上是搞定了發郵件的問題。但不少狀況下郵件的內容不是固定的,而後又須要有一個合適的樣式,這就須要使用模板了。nodemailer有nodemailer-markdownnodemailer-express-handlebars倆個插件,分別支持markdown語法和handlebars的語法,理論上handlebars也支持mustache模板,可是去看了看nodemailer-express-handlebars的用法,不是很喜歡。另外郵件採用markdown的風格不是很好,並且設不了郵件背景,不過適合發有代碼片斷的郵件。javascript

爲解決上面的問題,本身包裝了一下mustache,取名mustache-promise,下面就展現一下如藉助這個模塊渲染mustache模板做爲郵件內容.html

代碼

  • 項目結構
    java

  • 主文件代碼node

//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-width: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標籤,但顯示不支持該類文件,失敗!git

mustache-promise的用法在文檔裏面有詳細的介紹github

---記錄,分享。轉載請註明出處!express

相關文章
相關標籤/搜索