如何自定义电子邮件传输

How to customise email transports

据我了解,Meteor 内部使用 nodemailer 发送电子邮件,并根据定义的 MAIL_URL 环境创建相应的传输 属性。

我们已经实现了一个 EmailSenderService,它创建了几个不同的 nodemailer 传输。它使用定义为生产模式设置的帐户设置和开发模式的硬编码空灵帐户。

我想知道是否以及如何更改内部 Meteor 电子邮件处理以使用我们特定于应用程序的 EmailSenderService 发送所有类型的电子邮件,尤其是通过帐户密码包发送的电子邮件(例如注册和忘记密码) -电子邮件)。我的想法是将对中央 Email.send 函数的调用重定向到我们的 EmailSenderService 而不是调用 Meteor 内部逻辑。

感谢您的思考以及任何即将出现的想法和提示...

您有几个选择:

1。猴子补丁 Email.send

正如@iiro 所说,您可以通过将 send 方法替换为您自己的方法来猴子修补 Email 模块。

Email.send = function (options) {
    return EmailSenderService.send(options);
}

2。用本地版本替换 email

如果 Meteor 在您项目的 packages/ 目录中找到同名包,它将使用该包而不是自己的实现。 Documentation

3。使用未记录的功能挂接到 Email.send

编辑: 我没看到 EmailTest 没有导出。所以这只能通过像选项 2 中那样制作本地副本来工作。

查看 source of the email package,在 Email.send 的开头有一个钩子 运行,它允许您通过返回 false 来防止默认执行​​。你可以这样使用:

EmailTest.hookSend(function (options) {
   EmailSenderService.send(options)
   return false; // To stop default sending behaviour
});