Используйте AWS SES в качестве шлюза входящей почты
Я пытаюсь использовать SES для перехвата входящей электронной почты для домена, выполнить некоторую обработку и обработку электронной почты с помощью лямбды, а затем хочу продолжить отправку электронной почты на конечный / исходный почтовый сервер.
Например:
- Скажи, что у меня есть mydomain.com
- mydomain.com использует службы Google Mail (GSuite)
- Я установил записи MX mydomain.com, чтобы указать SES от GSuite
- sender@notmydomain.com отправляет электронное письмо по адресу receive@mydomain.com
- электронная почта получена SES и обработана lambda
- Затем лямбда отправляет электронное письмо на оригинальный почтовый сервер Gsuite.
- конечный результат: receive@mydomain.com получает сообщение электронной почты в gmail от sender@notmydomain.com (возможно, с некоторыми элементами письма, отредактированными лямбда-выражением)
Основная проблема заключается в том, что MX-запись mydomain.com будет затем указывать на SES, а после отправки в лямбду-сообщение сообщение будет отправляться на SES, а не на исходный почтовый сервер.
Есть ли хороший способ обойти эту проблему? Есть ли лучшая практика, относящаяся к описанному выше варианту использования, перехвату и обработке писем? Я также не уверен, что "Входящий почтовый шлюз" является правильным термином для описания моего варианта использования.
1 ответ
Чтобы обойти это, ваша Lambda должна будет явно инициировать SMTP-соединение с серверами GSuite для доставки электронной почты и не использовать SES в качестве исходящего ретранслятора.
Так будет:
[Internet] -> {DNS MX} -> [SES] -> [Lambda] -> {explicit SMTP} -> [Gsuite]
^
|
{list of Gsuite servers}
В вашем случае я бы также удалил приемную лямбду из SMTP-отправки. Таким образом, вы сможете получать электронные письма, даже если по какой-то причине доставка в Gsuite не удалась. Например что-то вроде этого:
... [SES] -> [Receiving Lambda] -> [SQS queue] -> [Sending Lambda] -> {SMTP} ...
SQS легко позволит вам повторить неудачные попытки доставки. Конечно, также создайте SQS DLQ (Dead Letter Queue) и несколько сигналов тревоги CloudWatch, чтобы вы знали, когда недоставленные письма начинают накапливаться в вашей очереди SQS или в DLQ!
Наличие "скрытых" SMTP-серверов не является чем-то необычным, однако обратите внимание, что определенный отправитель может выяснить, что вы используете Gsuite (например, из ответов электронной почты), и может обойти обработку SES. Не уверен, если это действительно проблема в вашем случае, но это хорошо, чтобы знать об этом.
Надеюсь, это поможет:)