依赖模块
- 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. :)'));
});
});