建议大家使用FireFox、Opera、Safri、IE8+等主流浏览器访问本站,否则可能会出现不兼容等问题!

NodeMailer 发送HTML信息邮件

Nodejs 凶恶的方块 3007次浏览 已收录 1个评论

前言:

这是实现用户邮件认证的一部分,也问了很多人应该怎么处理,折腾了也大半天,主要困在渲染和异步的坑哪里。最终效果..

NodeMailer 发送HTML信息邮件

代码实现:

nodermailer相关代码如下,不要妄想做什么邮件轰炸器,一般邮箱每秒接受8封同账户邮件(亲贱),需要注意的地方时from:后面的发送人地址“<>”不要漏了,之前在这里踩了个大坑。

var Nodemailer=require('nodemailer');
var transporter = Nodemailer.createTransport({
            host: 'smtp.163.com',
            port: 25,
            auth: {
                user: '******',
                pass: '*******'
            }
        })
        var mailOptions = {
            secureConnection: true,
            from: 'DDH<fkwebs@163.com>', // sender address
            to: That.to, // list of receivers//接收人地址
            subject: 'DDH邮件账户认证 ✔', // Subject line 
               text: '邮件激活认证✔', // plaintext body  就是直接找邮件上显示的text内容
            html: html// html body
        };
        transporter.sendMail(mailOptions, function (error, info) {
            if (error) {
                callback(error, null);
            } else {
                callback(null, info.response); 
            }
        })

这还仅仅不够,需要渲染的html页面,怎么能从模版中做好用户名称和验证地址的渲染呢?总不能让所有Email的千篇一律吧,于是乎又陷入深深的纠结之中。于是问了柴犬君,柴犬君答:“汪,汪,汪汪!!”没错,我从他的教导生中领会到了就是This!

 function stmpHTML(name){
var str1='我的名字是'
var str2='我喜欢吃翔'
return  (str1+name+str12)
}
stmpHTML(柴犬);//返回:我的名字是柴犬,我喜欢吃翔。

从这里,我们可以看到大哥柴犬的智商是多么的高,我是万万没想到还可以这样弄。稍等…有点不对劲,如果需要渲染的信息很多这不就是坑了。于是乎我又问柴犬大哥,大哥云:“汪汪,汪汪汪,汪汪,汪!”

大哥果然是大哥,他说可以用jade渲染用rander方法,聪明如你,我刚准备res.render()然后爬虫爬回来(PS:我是有多笨),大哥又叫了几声,我baidu一下,原来jade有 jade.renderFile();方法可以渲染文件并返回一个html;

jade.renderFile('views/mailer/prove.jade', JadeByHtml, function (error, html) {
 //JadeByHtml 是要渲染的信息
        console.log(html)
    }

这样就方便多了,只要jade模版整好,直接就能渲染成html字串,分分钟成功。这个故事告诉我们:jade是渲染引擎,而不是渲染中间件…..

然后我屁颠屁颠的去执行,发现每次都收到一个空对象的文件,一开始以为是收邮件网页无法解析<html><heade><body>等重复标签,经过折腾发现,多个标签浏览器是自动合并的,最后又问了狗哥,狗哥说,我掉进了异步的大坑。就是同时写了多个异步函数在同一个函数里,jade不等渲染返回,下面的方法就执行了,而且两个回调不容易写嵌套,这意味着下面的对象无法调用jade的渲染回调,如果写到里面,下面的回调又不能获取mailoption来发送邮件。狗哥说发给他看看能不能写成回调,一不做二不休,自己翻出ECMA6,来了个promise(人生中第一个ECMA6语法),折腾了2小时终于让他们有序执行了。具体方法下次说。

 


方块网络 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明NodeMailer 发送HTML信息邮件
喜欢 (0)or分享 (0)
avatar
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(1)个小伙伴在吐槽
  1. avatar
    不错 可以试试
    米粒博客2016-03-06 18:44 回复 Windows 10 | Chrome 45.0.2454.101