我正在参与掘金创作者训练营第4期,点击了解活动详情,一起学习吧!
Nodemailer 是一个简单易用的 Node.JS 邮件发送模块,可以方便地发送电子邮件。该项目于 2010 年开始,至今已经在github上已经有14.5k的stars。这也是如今大多数 Node.js 用户默认情况下发送邮件的解决方案。 Nodemailer的主要特点包括:
- 支持Unicode编码,包括表情符号
- 支持Window系统环境,–您可以使用npm在Windows上,就像其他模块一样,没有编译的依赖项
- 支持HTML内容和普通文本内容
- 支持附件(传送大附件)
- 支持HTML内容中嵌入图片
- 支持SSL/STARTTLS安全的邮件发送
- 支持内置的transport方法和其他插件实现的transport方法
- 支持自定义插件处理消息
- 支持XOAUTH2登录验证 官网地址:nodemailer.com
GitHub地址:github.com/nodemailer/…
安装使用Nodemailer
首先,我们要下载安装Nodemailer 注意node版本:Node.js v6+
npm install nodemailer --save
然后编写发邮件的函数
/**
* +----------------------------------------------------------------------
* 邮件逻辑
* +----------------------------------------------------------------------
*/
const nodemailer = require('nodemailer')
const {smtp} = require('../config/config')
const sendMails = async function ({to, subject, content,attachments }) {
return new Promise(resolve => {
const { host, port, secure, user, password } = smtp;
if (!user || !password || !to) {
return;
}
const html = `<!DOCTYPE HTML>
<html>
<head>
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<title>${subject}</title>
</head>
<body>
<div class="mail-box">
${content}
</div>
</body>
</html>`;
nodemailer
.createTransport({
host, // 设置服务
port, // 端口
secure, // 是否使用TLS,true,端口为465,否则其他或者568
auth: { // 用户名和密码/授权码
user,
pass: password
}
})
.sendMail(
{
from: `test <${user}>`, // 发送邮箱
to: to, //接收邮箱
subject: subject, //标题
html, //内容
attachments //附件
},
(err,info) => {
if (err) {
console.error(`对${to}邮件发送失败!`,err)
resolve(false);
return
}
console.log(`对${to}邮件发送成功!`,info)
resolve(true);
}
);
});
}
module.exports = sendMails
接下来就是调用发送邮件了
const sendMails = require("../utils/mail")
// 邮件发送
sendMails({
to: users.userEmail,
subject: `项目测试邮件`,
content: ‘测试邮件发送’
})
按照这个格式,发送成功是没什么问题的。
提示
QQ 的 host 是 smtp.qq.com;163 的 host 是 smtp.163.com
163和qq获取授权码
163邮箱的话,要开启POP3/SMTP服务,在设置 --> POP3/SMTP/IMAP页面,设置。开通后会有个授权码的,配置里的密码,就是用这个授权码
qq邮箱的话,同样也要开启这个服务,设置 --> 账户 --> POP3服务,点击开启,就会有个授权码。
这样qq和163授权码就开启了,密码那里就可以填授权吗就行
常见错误
535 错误
Error: Invalid login: 535 Error: authentication failed
认证失败:
- 可能是账号密码错误
- 连接时加 ssl:
secureConnection: true,
553 错误
Error: Mail command failed: 553 Mail from must equal authorized user
发件人和认证的邮箱地址不一致
- auth.user 需要与 from 中的邮箱一致
好啦。更多邮箱的配置,像CC、Xoauth2、attachments等可去官网详细了解 nodemailer.com/message/。