Appearance
nodemailer
简介
nodemailer 是一个功能强大的 Node.js 电子邮件发送库,支持 SMTP、sendmail、Amazon SES 等多种传输方式,可以发送文本、HTML、附件等多种格式的邮件。
安装
bash
npm install nodemailer基本使用
1. 创建传输器
javascript
const nodemailer = require('nodemailer')
// 使用 SMTP
const transporter = nodemailer.createTransport({
host: 'smtp.example.com',
port: 587,
secure: false, // true for 465, false for other ports
auth: {
user: 'user@example.com',
pass: 'password',
},
})2. 发送邮件
javascript
async function sendMail() {
try {
const info = await transporter.sendMail({
from: '"发件人" <sender@example.com>',
to: 'receiver@example.com',
subject: '邮件主题',
text: '纯文本内容',
html: '<b>HTML 内容</b>',
})
console.log('邮件发送成功:', info.messageId)
} catch (error) {
console.error('邮件发送失败:', error)
}
}高级特性
1. 发送附件
javascript
transporter.sendMail({
// ... 其他选项
attachments: [
{
filename: '文件.pdf',
path: '/path/to/file.pdf',
},
{
filename: '图片.png',
path: 'https://example.com/image.png',
},
],
})2. 使用模板
javascript
const handlebars = require('handlebars')
const template = handlebars.compile(`
<h1>你好 {{name}}</h1>
<p>{{message}}</p>
`)
transporter.sendMail({
// ... 其他选项
html: template({ name: '用户', message: '欢迎使用我们的服务' }),
})3. 使用 OAuth2
javascript
const transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
type: 'OAuth2',
user: 'user@gmail.com',
clientId: 'YOUR_CLIENT_ID',
clientSecret: 'YOUR_CLIENT_SECRET',
refreshToken: 'YOUR_REFRESH_TOKEN',
accessToken: 'YOUR_ACCESS_TOKEN',
},
})最佳实践
错误处理
javascripttry { await transporter.verify() console.log('服务器配置正确') } catch (err) { console.error('服务器配置错误:', err) }使用队列
javascriptconst queue = [] async function processQueue() { while (queue.length) { const mail = queue.shift() await sendMail(mail) await new Promise((resolve) => setTimeout(resolve, 1000)) // 限制发送速率 } }环境变量配置
javascriptconst transporter = nodemailer.createTransport({ host: process.env.SMTP_HOST, port: process.env.SMTP_PORT, auth: { user: process.env.SMTP_USER, pass: process.env.SMTP_PASS, }, })
注意事项
- 不要在代码中硬编码敏感信息
- 使用 TLS/SSL 保护邮件传输
- 处理好发送失败的情况
- 注意邮件发送频率限制
- 遵守反垃圾邮件政策