nodejs发送邮件

日期:2017年3月31日     

依赖模块

  • nodemailer
  • nodemailer-direct-transport

常用的nodemailer支持两种模式:

  • 1.配置发送邮件服务器(可以是网易、腾讯、谷歌等)
  • 2.直接本地起一个邮件服务器发送邮件

官方给的说法是本地起一个邮件服务器的方法稳定性较差,性能问题突出,所以如果需要发送大量的邮件的话不建议使用这种方式,但是这种方式的优势是不需要你去额外申请一个账号,而且可以自定义发件人信息。在nodemailer 1.0以下的版本是自带direct-transport功能的,但是新版3.3已经不支持了,所以如果需要用到direct-transport的话需要引入nodemailer-direct-transport的功能 。

使用

以下代码中使用了loadsh模块来处理数据,可以根据需要使用。

配置发送邮件服务器

var nodemailer = require("nodemailer");  
var u = require('loadsh')  
var config  = {  
    options: {
        host: 'smtp.exmail.qq.com',
        auth: {
            user: 'xxx@iyuxy.com',
            pass:  'xxxxxpassword'
        }
    }
}
var transport = nodemailer.createTransport(config.options, {});  
var message = {  
    // 收件人
    to: 'xxxx <xxx@qq.com>',

    // 邮件主题
    subject: 'test email', //

    // 内容
    text: 'Hello wolrd!',

    // 内容
    html: '<p>Hello world!</p>',

    // Apple Watch specific HTML body
    watchHtml: '<p>Hello world<p>',
}

message = u.extend(message, {  
        from: 'xxx <xxx@iyuxy.com>',
        generateTextFromHTML: true,
        encoding: 'base64'
});

transport.sendMail(message, function (error, response) {  
    if (error) {
        console.log(error);
    }
    else {
         console.log(response);
    }
}

直接本地起一个邮件服务器发送邮件

var nodemailer = require("nodemailer");  
var directTransport = require('nodemailer-direct-transport');  
var u = require("loadsh");  
var transport = nodemailer.createTransport(directTransport());

var message = {  
    // 收件人
    to: 'xxxx <xxx@qq.com>',

    // 邮件主题
    subject: 'test email', //

    // 内容
    text: 'Hello wolrd!',

    // 内容
    html: '<p>Hello world!</p>',

    // Apple Watch specific HTML body
    watchHtml: '<p>Hello world<p>',
}

message = u.extend(message, {  
        from: 'xxx <xxx.com>',
        generateTextFromHTML: true,
        encoding: 'base64'
});

transport.sendMail(message, function (error, response) {  
    if (error) {
        console.log(error);
    }
    response.statusHandler.once('failed', function (data) {
        var reason = 'Email Error: Failed sending email。。。。';
        if (data.error && data.error.errno === 'ENOTFOUND') {
            reason += ': there is no mail server at this address: ' + data.domain;
        }
        reason += '.';
        return reject(self.feedBack(false, reason));
   });
   response.statusHandler.once('requeue', function (data) {
        var errorMessage = 'Email Error: message was not sent, requeued. Probably will not be sent. :(';
        if (data.error && data.error.message) {
            errorMessage += '\nMore info: ' + data.error.message;
        }
        return reject(self.feedBack(false, errorMessage));
   });
   response.statusHandler.once('sent', function () {
       return resolve(self.feedBack(true, 'Message was accepted by the mail server. Make sure to check inbox and spam folders. :)'));
   });
});

参考链接

nodemailer官网

nodemailer github

(正文完)



© 喻小右 2016 京ICP备15064386号-1