javascript - 如何自定义电子邮件传输

标签 javascript meteor meteor-accounts

据我了解,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/

相关文章:

javascript - 禁止 Meteor 注册

javascript - Jquery html attr单选输入alt内容

javascript - 我可以给 jQuery 变量一个类,然后更改该类的字体颜色吗

heroku - 加密 key 未经授权用于持续部署 Travis → Heroku

mongodb - Meteor:我应该如何更新用户集合以在对象/字典中包含一个新属性?

twitter - Meteor 账户-twitter 无法使用

c# - 日期时间不会过滤到 Angular 中的时间。

javascript - 防止 $scope 变量副本监听其原始内容

meteor - 你如何从 meteor 壳访问一个集合?

javascript - Meteor - 如何在同一模板助手中调用另一个函数