使用nodemailer发送邮件
1.简介
nodemailer是一个nodejs应用的邮件服务模块
- 官网地址:https://nodemailer.com
- GitHub地址:https://github.com/nodemailer/nodemailer
- 本篇文档GitHub地址: https://github.com/niexq/nodemailerTest
2.nodemailer功能特性
- 支持Unicode编码,包括emoji
- 支持Window系统环境
- 支持HTML内容和纯文本内容
- 支持附件
- 支持HTML内容中嵌入图片附件
- 支持TLS/STARTTLS安全的邮件发送
- 除了支持内置的transport方法,还支持其他插件实现的transport方法
- 支持DKIM签署消息
- 支持自定义插件处理消息
- 支持XOAUTH2登录验证
- 支持SMTP连接代理
- 支持ES6
- 支持从ethereal.email自动生成的电子邮件测试帐户
3.要求
- node.js v6.0.0或更高版本
4.安装
1 | npm install nodemailer --save |
5.官方示例
1 | "use strict"; |
- 这是一个生成了Ethereal的账户,发送纯文本和HTML正文电子邮件的完整示例。
6.使用自己qq邮箱或163邮箱发送邮件,发送多人邮箱
- 备注:使用qq邮箱发送需要开启POP3/SMTP服务,复制授权码配置在pass中。163邮箱默认已开通。
6.1 .env文件配置
1
2
3
4
5
6
7
8
9
10
11RUN_LEVEL = production
MAIL_HOST = smtp.exmail.qq.com
MAIL_SERVICE = QQ
MAIL_PORT = 465
MAIL_SECURE = true
MAIL_SECURE_CONNECTION = true
MAIL_USER = ******@qq.com
MAIL_PASS = ******
MAIL_NICKNAME = 👻测试nodemailer发邮件👻
MAIL_TO = ******@gmail.com,******@163.com,******@qq.com6.2 config.js文件配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23'use strict';
const argv = require('yargs').argv;
require('dotenv').config({
path: argv.env,
});
const env = process.env;
module.exports = {
mail: {
// host: env.MAIL_HOST, // 官方demo方式,暂时注释
service: env.MAIL_SERVICE, // 使用内置传输发送邮件 查看支持列表:https://nodemailer.com/smtp/well-known
port: env.MAIL_PORT,
// secure: env.MAIL_SECURE, // 官方demo方式,暂时注释
secureConnection: env.MAIL_SECURE_CONNECTION,
auth: {
user: env.MAIL_USER,
pass: env.MAIL_PASS, // 如果是使用QQ邮箱发送,此密码不是邮箱账户的密码而是授权码。
},
from: `${env.MAIL_NICKNAME}<${env.MAIL_USER}>`,
to: env.MAIL_TO,
},
};6.3 lib/sendMail.js文件配置
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
30const nodemailer = require('nodemailer');
const mailconf = require('../config').mail;
// create reusable transporter object using the default SMTP transport
const transporter = nodemailer.createTransport(mailconf);
// setup email data with unicode symbols
const mailOptions = {
from: mailconf.from, // sender address
to: mailconf.to, // list of receivers
subject: '测试标题', // Subject line
text: 'Hello world?', // plain text body
html: '<b>Hello world?</b>', // html body
};
// send mail with defined transport object
const sendMail = ({ message = '来自测试nodemailer发邮件', subject = '这个一个默认的测试标题' }) => {
if (process.env.RUN_LEVEL !== 'production') { // 测试环境可跳过
return;
}
mailOptions.subject = subject;
mailOptions.html = `<b>${message}</b>`;
mailOptions.text = `${message}`;
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
return console.log(error);
}
console.log(`发送成功,messageId为:${info.messageId}`.green);
});
};6.4 index.js文件代码
1
2
3
4
5
6
7
8
9
10
11
12require('colors');
const sendMail = require('./lib/sendMail');
// 使用封装好的发送邮件方法(可按项目需求,需要的地方调用此方法)
sendMail({
message: '这是邮件测试内容',
subject: '邮件标题hello world'
});
console.log('send mail start'.blue);使用163邮箱发送雷同,运行程序node index.js,成功将返回发送成功,messageId为**。