Skip to main content

用法

本页将演示如何快速启动 Nodemailer。您将学习如何创建一个传输器(用于发送邮件的对象)以及如何通过它发送邮件。

安装

通过 npm 安装 Nodemailer:

npm install nodemailer

创建传输器

传输器 是一个处理与邮件服务连接并代表您发送邮件的对象。您只需创建一个传输器,并在所有邮件中重复使用。

const nodemailer = require("nodemailer");

// 使用 SMTP 创建传输器
const transporter = nodemailer.createTransport({
host: "smtp.example.com",
port: 587,
secure: false, // 使用 STARTTLS(连接后升级到 TLS)
auth: {
user: process.env.SMTP_USER,
pass: process.env.SMTP_PASS,
},
});

createTransport(transport[, defaults]) 函数返回一个可复用的传输器实例。

参数类型 / 描述
transport对象、字符串或插件。传入配置对象(如上所示)、连接 URL(例如 "smtp://user:pass@smtp.example.com:587")或已配置好的传输插件。
defaults对象(可选)。默认值,自动合并到通过此传输器发送的每封邮件中。适用于设置统一的 from 地址或自定义头部。
复用您的传输器

在应用启动时只创建一次传输器,并在所有邮件中复用。为每封邮件创建新的传输器将浪费资源,因为每个传输器都会打开网络连接并可能进行身份验证。

其他传输类型

  • SMTP - 详见 SMTP 指南 获取完整配置选项列表。
  • 插件 - Nodemailer 可通过实现了 send(mail, callback) 接口的任意传输发送邮件。可参考 传输插件文档 获取可用选项。

验证连接(可选)

发送邮件前,您可以验证 Nodemailer 是否能连接到您的 SMTP 服务器。这有助于提前捕捉配置错误。

await transporter.verify();
console.log("服务器已准备好接收邮件");

发送邮件

获得传输器后,调用 transporter.sendMail(message[, callback]) 发送邮件。

(async () => {
try {
const info = await transporter.sendMail({
from: '"Example Team" <team@example.com>', // 发件人地址
to: "alice@example.com, bob@example.com", // 收件人列表
subject: "Hello", // 邮件主题
text: "Hello world?", // 纯文本正文
html: "<b>Hello world?</b>", // HTML 正文
});

console.log("邮件已发送: %s", info.messageId);
// 预览 URL 仅在使用 Ethereal 测试账户时可用
console.log("预览 URL: %s", nodemailer.getTestMessageUrl(info));
} catch (err) {
console.error("发送邮件时出错", err);
}
})();

参数

参数描述
message包含邮件内容和头部的对象。详情请见 邮件配置
callback(可选) 签名为 (err, info) => {} 的函数。如果省略,sendMail 返回一个 Promise。

大多数传输返回的 info 对象包含:

属性描述
messageId邮件的 Message-ID 头部值。
envelope一个对象,包含 SMTP 信封 地址(fromto)。
accepted服务器接受的收件人地址数组。
rejected服务器拒绝的收件人地址数组。
pending对于 direct 传输:收到临时错误的地址。
response从 SMTP 服务器接收到的最终响应字符串。
部分成功

当邮件有多个收件人时,只要至少一个收件人地址被服务器接受,该邮件即被视为已发送。请检查 rejected 数组以查看被拒收的地址。