Используйте 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. Не уверен, если это действительно проблема в вашем случае, но это хорошо, чтобы знать об этом.

Надеюсь, это поможет:)

Другие вопросы по тегам