之前对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-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标签,但显示不支持该类文件,失败!

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

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

【nodemailer】之 work with mustache的更多相关文章

  1. 【nodemailer】 初试

    nodemailer 是什么? 简单的讲nodemailer就是用来发送邮件的.最近的一个项目需要向客户的注册邮箱发送验证连接,研究了一下. 刚开始我以为nodemailer还可以用来接收邮件,看了好 ...

  2. 使用nodemailer发送邮件

    今天闲来无事,一时兴起看了下如果使用javascript来发送邮件.经过调研发现,nodeJs可以实现这个功能. 具体的步骤如下: 1.安装依赖 npm install nodemailer -g ( ...

  3. 微信小程序技术分析:Mustache语法要点总结

    小程序开发的wxml里,用到了Mustache语法.所以,非常有必要把Mustache研究下. 什么是Mustache?Mustache是一个logic-less(轻逻辑)模板解析引擎,它是为了使用户 ...

  4. nodemailer 发邮件

    var transporter = nodemailer.createTransport({//v1.0 above do not use 'SMTP' as first param host: &q ...

  5. nodemailer实现node发送邮件

    作为一个前端er,利用node独立做一些全栈小项目,是很有效率和必要的. 需要: 做一个活动报名页面,用户填好的表单需要被工作人员收到,一想到把数据存数据库,还需要给工作人员写一个管理页面就觉得很麻烦 ...

  6. Javascript模板引擎mustache.js详解

    mustache.js是一个简单强大的Javascript模板引擎,使用它可以简化在js代码中的html编写,压缩后只有9KB,非常值得在项目中使用.本文总结它的使用方法和一些使用心得,内容不算很高深 ...

  7. Mustache 使用总结

    前言: 在分析 jeesite 项目的时候,看到了 Mustache,于是查了下 正文: 1.Mustache 概述 Mustache 是基于 JavaScript 实现的模板引擎,即用来 渲染前台页 ...

  8. Mustache 使用心得总结

    Mustache 使用心得总结 前言: 之前的一个项目里面就有用到这个前台的渲染模版,当时挺忙的也没时间抽空总结一下,刚好上周项目里又用到这个轻量型的渲染模版,真心感觉很好用,因此就总结一下使用心得, ...

  9. nodejs & nodemailer

    nodejs & nodemailer https://www.npmjs.com/package/nodemailer 上面的連接裏面 有有一個例子: 可以直接拿來用: 安裝依賴,在pack ...

随机推荐

  1. java 实现视频转换通用工具类:视频相互转换-Ffmpeg(三)

    java 实现视频转换通用工具类:获取视频元数据信息(一) java 实现视频转换通用工具类:视频相互转换-总方法及Mencoder(二) 这节主要是ffmpeg的相关方法封装,在实际调用中主要使用f ...

  2. sudo apt-get install lib32stdc++6

    [2014-06-19 12:39:55 - android_marketing_zj] /home/exmyth/package/adt-bundle-linux-x86_64-20140321/s ...

  3. Microsoft.AspNet.FriendlyUrls发布到IIS后404报错的解决方案

    我一个项目都基本上做完了,结果部署到我服务器的时候结果一直报404 找不到 一看global.asax有个路由注册的代码 public static void RegisterRoutes(Route ...

  4. MyEclipse设置默认的目光格式

    首先,选择菜单 windows-->preference Java-->Code Style-->Code Templates code-->new Java files 然后 ...

  5. PDF转换成二进制字符串写入 HTTP 输出流

    最近项目需要做电子签章,需要网页打开PDF签章后保存:正好复习哈二进制和流的转换: 文件转换成二进制字符串写入HTTP输出流 protected void Page_Load(object sende ...

  6. Making the impossible: 3 nodes intercontinental replication--转载

    原文:http://www.percona.com/blog/2012/01/11/making-the-impossible-3-nodes-intercontinental-replication ...

  7. MySQL(15):Select-distinct(返回非重复的记录)

    1. 查询所有记录 和 查询 非重复记录 语法: SELECT    [ALL | DISTINCT ] All:返回所有记录 Distinct:返回非重复记录 针对获得的记录内的字段生效.   2. ...

  8. ios webview 图片自适应屏幕宽度

    //这个知识点主要是自己最近在尝试写后台接口 在移动端展示的时候需要用到这个知识点,在webViewDidFinishLoad方法里面执行一段js代码 拿到各个图片 判断其宽度是否大于当前手机屏幕尺寸 ...

  9. [置顶] c++类的继承(inheritance)

    在C++中,所谓"继承"就是在一个已存在的类的基础上建立一个新的类.已存在的类(例如"马")称为"基类(base class )"或&quo ...

  10. aggregation 详解3(bucket aggregation)

    概述 桶分聚合不进行权值的计算,他们对文档根据聚合请求中提供的判断条件(比如:{"from":0,  "to":100})来进行分组(桶分). 桶分聚合还会额外 ...