1. 发送邮件的使用场景
发送邮件是企业项目里的常见需求,我们可以通过邮件:
- 发送各种通知给用户
- 可以通过邮件重设密码
2、发件箱与收件箱
发送邮件,首先得有个发件箱。顾名思义,发件箱就是发送邮件的邮箱。大家可以用自己的 QQ 邮箱、网易 163 邮箱,由于网络原因,一些国外的邮箱,例如谷歌的Gmail等等,就不推荐使用了。
就以最常见的 QQ 邮箱
为例来发送邮件。先登录自己的 QQ 邮箱
:https://mail.qq.com/
,点击设置
->账号
往下找到POP3
这个地方,
将服务开启
,并根据提示发送短信,获取授权码
3、发送邮件
3.1 安装 nodemailer
npm i nodemailer
3.2. 发送邮件的 mail.js
在nodemailer
的官方文档里,有一个基础案例
上面部分是发件箱的配置,下面部分就是发送给谁,发送的内容是什么。看着不是很难,我们新建一个专门发送邮件的文件
在utils/mail
封装
const nodemailer = require('nodemailer');
/**
* 发件箱配置
*/
const transporter = nodemailer.createTransport({
host: process.env.MAILER_HOST,
port: process.env.MAILER_PORT,
secure: process.env.MAILER_SECURE,
auth: {
user: process.env.MAILER_USER,
pass: process.env.MAILER_PASS
},
});
* 发送邮件
* @param email // 需要发送的邮箱
* @param subject // 主题
* @param html // 内容
* @returns {Promise<void>}
*/
const sendMail = async (email, subject, html) => {
await transporter.sendMail({
from: process.env.MAILER_USER,
to: email,
subject,
html,
});
}
module.exports = sendMail;
里面的参数:
- from:就是发件箱
- to:就是发给谁
- subject:是邮件的主题
- html:就是发送的邮件内容
3.3. 环境变量
.env 文件
MAILER_HOST=smtp.qq.com
MAILER_PORT=465
MAILER_SECURE=true
MAILER_USER=你的QQ邮箱地址
MAILER_PASS=你的QQ邮箱授权码
.env.example中添加对应的说明
MAILER_HOST=
MAILER_PORT=
MAILER_SECURE=
MAILER_USER=
MAILER_PASS=
3.4. 发送邮件
找到自己的注册或需要用到的
接口
// 引用
const sendMail = require('../utils/mail');
// 实例
// 发送邮件
const html = `
您好,<span style="color: red">${user.nickname}。</span><br><br>
恭喜,您已成功注册会员!<br><br>
请访问<a href="https://xw.cn">「xw」</a>官网,了解更多。<br><br>
━━━━━━━━━━━━━━━━<br>
xw
`
await sendMail(user.email, '「xw」的注册成功通知', html);
具体实例
router.post('/sign_up', validateCaptcha, async function (req, res) {
try {
const body = {
email: req.body.email,
username: req.body.username,
nickname: req.body.nickname,
password: req.body.password,
sex: 2,
role: 0
}
const user = await User.create(body);
delete user.dataValues.password; // 删除密码
// 请求成功,删除验证码,防止重复使用
await delKey(req.body.captchaKey);
const html = `
您好,<span style="color: red">${user.nickname}。</span><br><br>
恭喜,您已成功注册会员!<br><br>
xw`
await sendMail(user.email, '「xw」的注册成功通知', html);
success(res, '创建用户成功。', {user}, 201);
} catch (error) {
failure(res, error);
}
});
4、其他邮箱发件
4.1. 网易 163 邮箱
使用网易 163 邮箱,也需要获取授权码后再操作
MAILER_HOST=smtp.163.com
MAILER_PORT=465
MAILER_SECURE=true
MAILER_USER=你的网易邮箱地址
MAILER_PASS=你的网易邮箱授权码
4.2. 阿里云企业邮箱配置
使用阿里云的企业邮箱,这是商业项目最推荐的,因为发件箱的域名,可以和你的官网使用相同的域名。
MAILER_HOST=smtp.mxhichina.com
MAILER_PORT=465
MAILER_SECURE=true
MAILER_USER=你的企业邮箱地址
MAILER_PASS=你的企业邮箱密码或三方客户端安全密码