Nodemailer
Nodemailer是一个简单易用的Node.js邮件发送组件
官网地址:nodemailer.com
GitHub地址:github.com/nodemailer/…
Nodemailer的主要特点包括:
支持Unicode编码
支持Window系统环境
支持HTML内容和普通文本内容
支持附件(传送大附件)
支持HTML内容中嵌入图片
支持SSL/STARTTLS安全的邮件发送
支持内置的transport方法和其他插件实现的transport方法
支持自定义插件处理消息
支持XOAUTH2登录验证
安装使用
1、下载安装插件
执行命令:npm install nodemailer --save
2、官方示例
"use strict";
const nodemailer = require("nodemailer");
// async..await is not allowed in global scope, must use a wrapper
async function main() {
// Generate test SMTP service account from ethereal.email
// Only needed if you don't have a real mail account for testing
let testAccount = await nodemailer.createTestAccount();
// create reusable transporter object using the default SMTP transport
let transporter = nodemailer.createTransport({
host: "smtp.ethereal.email",
port: 587,
secure: false, // true for 465, false for other ports
auth: {
user: testAccount.user, // generated ethereal user
pass: testAccount.pass, // generated ethereal password
},
});
// send mail with defined transport object
let info = await transporter.sendMail({
from: '"Fred Foo" <foo@example.com>', // sender address
to: "bar@example.com, baz@example.com", // list of receivers
subject: "Hello", // Subject line
text: "Hello world?", // plain text body
html: "Hello world? ", // html body
});
console.log("Message sent: %s", info.messageId);
console.log("Preview URL: %s", nodemailer.getTestMessageUrl(info));
}
main().catch(console.error);
应用实例
1、获取授权码
这里我使用QQ邮箱对外发送邮件,首先生成授权码

2、开启一个SMTP连接池
const nodemailer = require('nodemailer');
const smtpTransport = require('nodemailer-smtp-transport');
// 开启一个 SMTP 连接池
const transport = nodemailer.createTransport(smtpTransport({
host: "smtp.qq.com", // qq邮箱主机
secure: true, // 使用 SSL
secureConnection: true, // 使用 SSL
port: 465, // SMTP 端口 或者587
auth: {
user: "example@foxmail.com", // 账号:域名邮箱账号
pass: "SMPT获取的密码" // 密码:SMPT获取的密码
}
}));
3、发送邮件方法
const sendEmail = ({email, content, key, post = '', link = '', m_content}) => {
// 设置邮件内容
const htmlStr = '可以自定义邮件模板';
const mailOptions = {
from: "kayrain.sun@foxmail.com", // 发件地址
to: email, // 收件列表
subject: "来自KBlog的回复", // 标题
text: "",
html: htmlStr // html 内容
}
return new Promise((resolve, reject) => {
transport.sendMail(mailOptions, function (error, response) {
if (error) {
console.log("邮件发送失败: " + error);
reject({
status: 0,
message: `邮件发送失败:${error}`
});
} else {
resolve({
status: 1,
message: "邮件发送成功"
});
}
// transport.close(); // 如果没用,关闭连接池
});
})
}