Node实现网站发送邮件的功能

在开发公司自研监控系统时,需要开发一个邮件发送通知的功能。非常幸运,很快就发现了两个人气值很高的Node开源项目,结合它们完成了邮件发送功能的开发。

生成邮件模板(node-email-templates)

node-email-templates 允许我们像开发页面一样,生成邮件模板。我们可以使用熟悉的jade,ejs等视图引擎,还可以通过sass去编写模板样式。node-email-templates 会帮助我们自动生成相应的样式内嵌的html页面。

插件Git地址:https://github.com/niftylettuce/node-email-templates

使用举例

  1. 安装插件,这里的视图引擎我们采用了ejs,样式文件使用sass。

    npm install email-templates ejs node-sass --save
    
  2. 添加模板文件夹,创建相关文件

    我们在根目录下创建了一个名为templates的文件,用来存放邮件模板;接下来,我们再创建一个名为monapi的文件夹,用来存放api质量监控相关的邮件模板,在该文件夹下,我们共创建了三个文件。其中html.ejs文件是必须的,另外两个是可选的。

    html.ejs:

    <link rel="stylesheet" href="style.css">
    <div class="api-info">
        <h2>API名称:<%= name %></h2>
        <div><label>平均时间:</label><span><%= avgTime + 'ms' %></span></div>
        <div><label>成功率:</label><span><%= sucRatio + '%' %></span></div>
    </div>
    

    text.ejs:

    API名称:<%= name %> 平均时间:<%= avgTime + 'ms' %> 成功率:<%= sucRatio + '%' %>
    

    style.scss:

    .api-info{
      h2{
        font-size: 24px;
        color:red;
      }
    }
    
  3. 引用插件,生成邮件模板实例

    接下来的工作就是基于模板文件和插件创建相应地邮件模板实例,代码如下:

    var EmailTemplate = require('email-templates').EmailTemplate;
    
    var templateDir = path.resolve(__dirname, '..', 'templates'); 
    var monapi = new EmailTemplate(path.join(templateDir, 'monapi'));
    

    这里需要特别提醒的是,目录的引用地址需根据你实际实际使用的目录结构做相应地调整。

  4. 使用邮件模板实例,生成邮件模板源码

    var apiInfo = {
        name: 'ws/get.cgi',
        avgTime:'200',
        sucRatio:'80'
     };
    
     monapi.render(apiInfo, function(err, resluts){
        if(err){
            console.log(err);
        }
        console.log(results.html);   //生成的html源码
        console.log(results.text);   //生成的text源码
     });
    

    如上所示,在回调函数里,我们可以得到生成的邮件模板源码。node-mail-template 还支持自己配置模板引擎,感兴趣的读者可以参考插件git文档中的介绍。

发送邮件(nodemailer)

现在我们已经生成了邮件的内容,接下来的工作就是发送邮件了。nodemailer是另外一个非常好用的插件,可以帮助我们非常方便的完成邮件发送的功能。

使用该插件需要注意两个核心概念,一个就是传输器(transporter),这是用来发送邮件的对象实例;该实例只需要初始化一次,就可以多次发送邮件。构建该对象实例时需定义一个传输机制(transport),这是另外一个核心概念。如果未制定使用的传输机制的话,传输器使用默认的传输机制nodemailer-direct-transport,使用默认传输是不可靠的,发送的邮件经常会被看做是垃圾邮件。一般推荐使用标准的SMTP传输node-mailer-smtp-transport

nodemailer-direct-transportnode-smtp-transport都是nodemailer内置的传输机制。针对特定的邮件服务器,还可以手动添加其他的传输插件,例如nodemailer-ses-transport等。

插件Git地址:https://github.com/nodemailer/nodemailer

使用举例

我们的例子中采用了标准的SMTP传输。

  1. 安装插件

    npm install modemailer --save
    
  2. 创建传输器实例

    var nodemailer = require('nodemailer');
    
    var transporter = nodemailer.createTransport(
      {
        host:'smtp.host.com',
        port:25,
        auth:{
          user:'***',
          pass:'******'
        },
        ignoreTLS:true,
        secure:false,
        debug:true
      }
    );
    

    关于SMTP配置项的说明,请参考https://github.com/nodemailer/nodemailer-smtp-transport#usage

  3. 发送邮件

    最后一步就是发送邮件了,这里我们发送邮件的操作放到了邮件模板生成的回调函数中,以保证传输内容的准确性。代码如下:

     monapi.render(apiInfo, function(err, results){
        if(err){
          console.log(err);
          return;
        }
    
        transporter.sendMail({
          from:'***@host.com',                   //发送邮箱
          to: '***@server.com, ***@sina.com',    //接收邮箱
          subject: 'hello',
          html:results.html,                     //生成的html源码
          text: results.text                     //生成的text源码
        }, function(error, info){
            if(err){
              console.log(error);
            }
        });
      });
    

邮件收到的内容如下:

MacDown Screenshot

另外,nodemailer还提供了添加抄送人,添加附件,内嵌图片等邮件发送常用功能。感兴趣的读者请参考插件git官方文档。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值