Как настроить транспорт электронной почты - PullRequest
3 голосов
/ 16 июня 2019

Как я понял, Meteor внутренне использует nodemailer для отправки электронных писем и создает соответствующий транспорт на основе определенного свойства среды MAIL_URL.

Мы реализовали EmailSenderService, который создает несколько различных транспортов nodemailer.Он использует настройки учетной записи, определенные как настройки для производственного режима, и жестко заданную эфирную учетную запись для режима разработки.

Интересно, можно ли и как изменить внутреннюю обработку электронной почты Meteor, чтобы использовать нашу специальную прикладную программу EmailSenderService для отправки всехвиды электронных писем, особенно те, которые отправляются через пакет с паролем учетной записи (например, письма о регистрации и забыл пароль).Моя идея заключается в том, чтобы перенаправлять вызовы центральной функции Email.send в нашу службу EmailSenderService вместо вызова внутренней логики Meteor.

Спасибо за продуманность и любые будущие идеи и советы ...

1 Ответ

1 голос
/ 17 июня 2019

У вас есть несколько вариантов:

1.Monkeypatch Email.send

Как говорит @iiro, вы можете просто обезьянько пропатчить модуль Email, заменив метод send своим собственным.

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

2.Замените пакет email на локальную версию

Если Meteor найдет пакет с таким же именем в каталоге packages/ вашего проекта, он будет использовать его над собственной реализацией. Документация

3.Используйте недокументированные функции, чтобы подключиться к Email.send

РЕДАКТИРОВАТЬ: Я не видел, что EmailTest не экспортируется.Таким образом, это работает только путем создания локальной копии, как в варианте 2.

Если посмотреть на источник пакета электронной почты , есть ловушка, которая запускается в начале Email.send и позволяетчтобы предотвратить выполнение по умолчанию, вернув false.Вы можете использовать это так:

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