据我了解,Meteor内部使用nodemailer发送电子邮件并根据定义的MAIL_URL环境属性创建相应的传输。
我们已经实现了一个EmailSenderService,它创建了几个不同的nodemailer传输。它使用定义为生产模式的帐户设置和开发模式的硬编码空帐户。
我想知道是否可以更改内部Meteor电子邮件处理方式,以使用我们的应用程序特定的EmailSenderService发送所有类型的电子邮件,尤其是通过帐户密码包发送的电子邮件(例如,注册密码和忘记密码电子邮件) )。我的想法是将对中央Email.send函数的调用重定向到我们的EmailSenderService,而不是调用Meteor内部逻辑。
感谢您的思考以及所有即将来临的想法和提示...
答案 0 :(得分:1)
您有一些选择:
Email.send
正如@iiro所说,您可以通过用自己的方法替换Email
方法来猴子修补send
模块。
Email.send = function (options) {
return EmailSenderService.send(options);
}
email
软件包替换为本地版本如果Meteor在您的项目的packages/
目录中找到了一个同名的程序包,它将在其自己的实现中使用该程序包。 Documentation
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
});