Skip to content
On this page

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',
  },
})

最佳实践

  1. 错误处理

    javascript
    try {
      await transporter.verify()
      console.log('服务器配置正确')
    } catch (err) {
      console.error('服务器配置错误:', err)
    }
  2. 使用队列

    javascript
    const queue = []
    async function processQueue() {
      while (queue.length) {
        const mail = queue.shift()
        await sendMail(mail)
        await new Promise((resolve) => setTimeout(resolve, 1000)) // 限制发送速率
      }
    }
  3. 环境变量配置

    javascript
    const transporter = nodemailer.createTransport({
      host: process.env.SMTP_HOST,
      port: process.env.SMTP_PORT,
      auth: {
        user: process.env.SMTP_USER,
        pass: process.env.SMTP_PASS,
      },
    })

注意事项

  1. 不要在代码中硬编码敏感信息
  2. 使用 TLS/SSL 保护邮件传输
  3. 处理好发送失败的情况
  4. 注意邮件发送频率限制
  5. 遵守反垃圾邮件政策

要保持清醒 永远不抱有意外的幻想 凭空的期待最要命