如何自定义电子邮件传输

时间:2019-06-16 16:11:26

标签: javascript meteor meteor-accounts

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

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

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

感谢您的思考以及所有即将来临的想法和提示...

1 个答案:

答案 0 :(得分:1)

您有一些选择:

1。猴子补丁Email.send

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

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
});