为什么要在 node 发送邮件?

电子邮件是—种用电子手段提供信息交换的通信方式,是互联网应用最广的服务。通过网络的电子邮件系统,用户可以以非常低廉的价格(不管发送到哪里,都只需负担网费)、非常快速的方式(几秒钟之内可以发送到世界上任何指定的目的地),与世界上任何一个角落的网络用户联系。

怎么在 node 发送邮件?

在很多项目中,我们都会遇到邮件注册,邮件反馈等需求。在 node 中收发电子邮件也非常简单,因为强大的社区有各种各样的包可以供我么直接使用。Nodemailer 包就可以帮助我们快速实现发送邮件的功能。

准备工作—-邮箱开启相关功能(授权码)

为了实现这个功能,你首先要有一个邮箱;由于需要使用 SMTP 方式发送,你还需要开启相关功能。你可以登录你的邮箱,然后开启这个设置。

  • 以 QQ 邮箱为例:设置->账户->开启服务 (选择 POP3/SMTP 服务)->点击开启 (需要发送短信开启)->授权码生成。

使用 nodemailer

  1. 安装
1
npm install nodemailer
  1. 引入
1
const nodemailer = require("nodemailer");
  1. 创建一个传输对象,配置参数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
//--------------------------------------------------------------------
// 如果没有真实账户可以使用createTestAccount(异步方法)生成虚拟账户
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
},
});
//--------------------------------------------------------------------

//--------------------------------------------------------------------
// 如果取得QQ邮箱授权可以配置成
let transporter = nodemailer.createTransport({
service: "QQ", // 发给QQ邮箱
port: 465, // 发邮箱的端口号
secureConnection: true, // 使用SSL加密传输
auth: {
// 权限认证
user: "2631640352@qq.com",
pass: "邮箱的授权码",
},
});
//--------------------------------------------------------------------
  1. 配置发送信息参数
1
2
3
4
5
6
let mailOptions = {
from: "来自2631640352@qq.com", // 发邮件的账号
to: "2631640352@qq.com", // 收邮件的账号
subject: "hello", // 标题
html: "<html><h1>world</h1></html>", // 邮寄的内容
};
  1. 发送邮件—-sendMail 方法
1
2
3
4
5
transporter.sendMail(mailOptions, (err, info) => {
if (!err) {
console.log("邮件已经发生完成");
}
});