以前對nodemailer作了簡要的研究,基本上是搞定了發郵件的問題。但不少狀況下郵件的內容不是固定的,而後又須要有一個合適的樣式,這就須要使用模板了。nodemailer有nodemailer-markdown和nodemailer-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);
<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}}
<div style="margin-left: 600px;font-style: italic;"> -----{{byWho}} </div>
若是你想在郵件中加背景圖,其實很簡單,參照以前那邊文章中的邏輯就能夠了,理論上講加音樂也能夠,我試試 :)--結果是顯示出了audio標籤,但顯示不支持該類文件,失敗!git
mustache-promise的用法在文檔裏面有詳細的介紹github
---記錄,分享。轉載請註明出處!express