Skip to main content

插件

Nodemailer 设计为可扩展的。你可以在邮件生命周期的三个明确定义的阶段注入自定义逻辑:

阶段关键词运行时机典型用途
预处理compile在创建邮件对象之后,但在生成 MIME 源之前模板渲染,自动生成纯文本版本,地址验证
处理stream编译 MIME 之后,准备发送邮件数据流时内联图片,转换 HTML 内容
发送transport邮件准备发送时SMTPSES、SparkPost、自定义 HTTP API
tip

当你希望插件适用于任何传输方式时,使用 compilestream 插件。Transport 插件仅在你想定义完全自定义的发送机制时才需要使用。

编写插件

插件是一个接收 mail 对象和回调函数的函数。下面是一个示例,当只提供了 HTML 内容时,自动生成纯文本版本的邮件:

// CommonJS 模块格式
module.exports = function myCompilePlugin(mail, callback) {
// mail 对象包含一个 `data` 属性,里边是你的邮件选项
// 你可以读取并修改这些属性,在邮件编译前进行处理

if (!mail.data.text && mail.data.html) {
// 使用 html-to-text 包从 HTML 生成纯文本
mail.data.text = require("html-to-text").htmlToText(mail.data.html);
}

// 完成后一定要调用回调
// 成功时不传参数,出错时传入 Error 对象以终止发送
callback();
};

要使用该插件,请通过 use() 方法注册到传输实例上:

const nodemailer = require("nodemailer");
const transport = nodemailer.createTransport({ sendmail: true });

// 注册一个 compile 插件 — 它会在 MIME 生成之前运行
transport.use("compile", require("./myCompilePlugin"));

错误处理

如果插件遇到问题,应阻止邮件发送,请传入一个 Error 对象给回调:

callback(new Error("模板未找到"));

传入错误后,邮件将不会发送。该错误会通过 sendMail() 的回调或被拒绝的 Promise 返回给调用者。

公共插件

以下是一些常用的社区维护插件,可供使用:

还想找其他插件?试试 在 npm 搜索 "nodemailer plugin"


需要更多控制?参见 创建插件,了解插件 API 的详细指南。