电子邮件是—种用电子手段提供信息交换的通信方式,是互联网应用最广的服务。通过网络的电子邮件系统,用户可以以非常低廉的价格(不管发送到哪里,都只需负担网费)、非常快速的方式(几秒钟之内可以发送到世界上任何指定的目的地),与世界上任何一个角落的网络用户联系。
在很多项目中,我们都会遇到邮件注册,邮件反馈等需求。在 node 中收发电子邮件也非常简单,因为强大的社区有各种各样的包可以供我么直接使用。Nodemailer 包就可以帮助我们快速实现发送邮件的功能。
Nodemailer是一个简单易用的Node.js邮件发送组件。
GitHub地址:https://github.com/nodemailer/nodemailer
为了实现这个功能,你首先要有一个邮箱;由于需要使用 SMTP 方式发送,你还需要开启相关功能。你可以登录你的邮箱,然后开启这个设置,以 QQ 邮箱为例:设置->账户->开启服务 (选择POP3/SMTP服务)->点击开启 (需要发送短信开启)->授权码生成。
这里要用到 nodemailer,需要自行安装:
npm install nodemailer
打开官网可以看见一个小例子:
"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: "<b>Hello world?</b>", // html body
});
console.log("Message sent: %s", info.messageId);
// Message sent: <b658f8ca-6296-ccf4-8306-87d57a0b4321@example.com>
// Preview only available when sending through an Ethereal account
console.log("Preview URL: %s", nodemailer.getTestMessageUrl(info));
// Preview URL: https://ethereal.email/message/WaQKMgKddxQDoou...
}
main().catch(console.error);
这个小例子是生成了 Ethereal 的测试账户进行邮件发送演示的。但是这多没意思,我们来使用自己的邮箱来发送邮件。
const nodemailer = require('nodemailer');
let transporter = nodemailer.createTransport({
service: 'QQ', // 发给QQ邮箱
port: 465, // 发邮箱的端口号
secureConnection: true, // 使用SSL加密传输
auth: { // 权限认证
user: '2631640352@qq.com',
pass: '这是邮箱的授权码在邮箱后台生成的'
}
})
let mailOptions = {
from: '来自2631640352@qq.com', // 发邮件的账号
to: '2631640352@qq.com', // 收邮件的账号
subject: 'hello', // 标题
html: '<html><h1>world</h1></html>' // 邮寄的内容
}
transporter.sendMail(mailOptions, (err, info) => {
if (!err) {
console.log('邮件已经发生完成')
}
})
如果是用短信验证码的话,无疑成本高,因为短信是收费的。想想做一个学习用的网站,还是选择邮件发送验证码吧。