最新版本号[免费下载]

使用Node.JS发送网站告警邮件

作者:本站编辑 发布时间:2015-11-24 来源:本站原创 点击数:

最近项目需要实现这样一个异常报告的功能:网站管理系统出现错误时,自动发送错误报告的邮件给运维人员。

原先是直接通过捕获错误异常,然后直接发送邮件的。但是随着项目的增多,部署到多台服务器,各个项目都有相同的一套告警邮件发送代码,不方便对告警机制做统一的管理;随着项目规模扩大,为了快速定位和发现存在的问题,告警邮件发送功能必须做到实时且不拖累网站功能的正常使用。

由于历史原因,网站主要使用的语言是C#,考虑到方便迁移和IIS并发的不足,直接否定了用C#实现这个告警系统的方案。考察了PHP、Python和Node.js以后,决定用Node.js来实现,因为和PHP、Python相比,满足以上的业务需求和性能需求,且足够的小巧,还方便部署。

由于之前没有Node.js的实际开发经验,只是跑了跑例子,所以还是去Google了一把“Node.js send mail”,找到了这个node_mailer ,按照Readme里面的步骤安装好node_mailer,并运行里面的例子,我稍微小修改了下,去掉了for循环:

var email = require("../lib/node_mailer");
email.send({
  host : "localhost",           // smtp server hostname
  port : "25",                 // smtp server port
  ssl: true,                        // for SSL support
  domain : "localhost",       // domain used by client to identify itself to server
  to : "***@gmail.com",
  from : "***@whitehouse.gov",
  subject : "node_mailer test email",
  body: "Hello! This is a test of the node_mailer.",
  authentication : "login",   // auth login is supported; anything else is no auth
  username : "my_username",        // username
  password : "my_password"         // password
},
function(err, result){
  if(err){ console.log(err); }
});

但是一直报错:cannot find moudel ”../lib/node_mailer”,修改为:

require("node_mailer");


也是一样找不到mooudel。Google到这篇 《Windows下 NodeJS 全局安装 modules 后在应用中 require 不到的解决方案》,添加 NODE_PATH以后,把代码改为如下:

var email = require("mailer");
 
email.send({
        host : "smtp.gmail.com",
        port : "25",
        ssl: true,
        domain : "smtp.gmail.com",
        to : "****@gmail.com",
        from : "****@gmail.com",
        subject : "node_mailer test email",
        body: "Hello! This is a test of the node_mailer.",
        authentication : "login",
        username : "****@gmail.com",
        password : "****"
    },
    function(err, result){
      if(err){ console.log(err); }
});

require的错误是没有了,但是:运行之后报“TypeError: Object # has no method ‘send’”错误。我在CNodejs.org发了这个帖子:《Node.js发送邮件,报no method ‘send’错误》,但是最终也还没有人答复我。

好吧,自力更生;不管白猫黑猫,能抓到老鼠的猫就是好猫。又Google到了Nodemailer,并通过特别注意下列方法把它install到全局模块:

npm install -g nodemailer

直接运行示例里面的代码:

var nodemailer = require("nodemailer");
 
// create reusable transport method (opens pool of SMTP connections)
var smtpTransport = nodemailer.createTransport("SMTP",{
    service: "Gmail",
    auth: {
        user: "gmail.user@gmail.com",
        pass: "userpass"
    }
});
 
// setup e-mail data with unicode symbols
var mailOptions = {
    from: "Sender Name ✔ <sender@example.com>", // sender address
    to: "receiver1@example.com, receiver2@example.com", // list of receivers
    subject: "Hello ✔", // Subject line
    text: "Hello world ✔", // plaintext body
    html: "<b>Hello world ✔</b>" // html body
}
 
// send mail with defined transport object
smtpTransport.sendMail(mailOptions, function(error, response){
    if(error){
        console.log(error);
    }else{
        console.log("Message sent: " + response.message);
    }
 
    // if you don’t want to use this transport object anymore, uncomment following line
    //smtpTransport.close(); // shut down the connection pool, no more messages
});
本文责任编辑: 加入会员收藏夹 点此参与评论>>
复制本网址-发给QQ/微信上的朋友
AI智能听书
选取音色