Node.JS发送网站告警邮件代码实例

发布时间:2020-05-21编辑:脚本学堂
node.js发送网站告警邮件的一段代码,node_mailer ,按照Readme中步骤安装好node_mailer,借助此模块实现发送邮件功能,需要的朋友参考下。

node.js实现网站异常报告的功能:网站管理系统出现错误时,自动发送错误报告的邮件给运维人员。

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

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

找到了这个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
});
 

邮件发送成功。

然后,提供一个HTTP服务(当然Socket也行),以接收网站系统发出的告警邮件请求。