据我了解,Meteor 在内部使用 nodemailer 发送电子邮件,并根据定义的 MAIL_URL 环境属性创建相应的传输。
我们已经实现了一个 EmailSenderService,它创建了几个不同的 nodemailer 传输。它使用定义为生产模式设置的帐户设置和开发模式的硬编码空灵帐户。
我想知道是否以及如何更改内部 Meteor 电子邮件处理以使用我们特定于应用程序的 EmailSenderService 发送所有类型的电子邮件,尤其是通过帐户密码包发送的电子邮件(例如注册和忘记密码电子邮件) ).我的想法是将对中央 Email.send 函数的调用重定向到我们的 EmailSenderService,而不是调用 Meteor 内部逻辑。
感谢您的思考以及任何即将出现的想法和提示...
最佳答案
您有几个选择:
1。 Monkeypatch 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 ,有一个 Hook 在 Email.send
的开头运行,允许您通过返回 false 来阻止默认执行。你可以这样使用它:
EmailTest.hookSend(function (options) {
EmailSenderService.send(options)
return false; // To stop default sending behaviour
});
关于javascript - 如何自定义电子邮件传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56620570/