express 发送邮件

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=你的企业邮箱密码或三方客户端安全密码

rabbitMQ 学习
rabbitMQ 优化发送邮件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值