AWS SES: ошибка "Адрес электронной почты не подтвержден" с ретрансляцией Postfix

Я настроил Amazon SES, проверил мой домен и был одобрен для режима производства. Когда письмо из внешнего мира отправляется на адрес в моем домене, мой сервер перенаправляет его обратно в учетную запись Gmail, но Amazon SES отклоняет пересылку с ошибкой

Email address is not verified

Например, если кто-то из yahoo.com отправит мне электронное письмо по адресу "me@mydomain.com", и это письмо будет немедленно переадресовано на "me@gmail.com" из-за записи в /etc/aliases, SES будет отклонение электронной почты на gmail.com, даже если "mydomain.com" является проверенным доменом. Когда я включаю подробный вход в Postfix для подключения к gmail.com, электронная почта кажется от yahoo.com и идет на gmail.com - ни один из которых не является моим доменом. Вы жалуетесь на тот факт, что электронная почта изначально была от yahoo.com? Если это так, то не могу ли я использовать SES при пересылке почты из внешних доменов, через мой домен, в другой (gmail) домен?

Однако он работает нормально, если я отправляю электронное письмо, исходящее из моего домена и идущее по адресу gmail.

Вот строка в /var/log/maillog где сервер SES отклоняет пересылку на gmail.com:

Apr 15 02:11:43 ip-10-194-190-140 postfix/smtp10191: 9013922528: to=<myaddress@gmail.com>, orig_to=<myaddress@mydomain.com>, relay=email-smtp.us-east-1.amazonaws.comhttp://54.243.71.143:25, delay=0.32, delays=0.01/0/0.11/0.2, dsn=5.0.0, status=bounced (host email-smtp.us-east-1.amazonaws.comhttp://54.243.71.143 said: 554 Message rejected: Email address is not verified. (in reply to end of DATA command))`

А вот строки, которые я добавил в /etc/postfix/main.cf:

relayhost = email-smtp.us-east-1.amazonaws.com:25
smtp_sasl_auth_enable = yes
smtp_sasl_security_options = noanonymous
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_use_tls = yes
smtp_tls_security_level = encrypt
smtp_tls_note_starttls_offer = yes
smtp_tls_CAfile = /etc/ssl/certs/ca-bundle.crt

Дополнительный вопрос:

Когда возникает эта проблема, где заканчивается электронная почта? Письмо принимается моим сервером Postfix для "me@mydomain.com", но пересылка на gmail.com отклонена Amazon SES. Но электронная почта не находится в очереди исходящей почты на моем сервере, она не находится в почтовом ящике моей учетной записи на моем сервере, и она не была возвращена исходному отправителю (в Yahoo, в моем примере выше). Куда это делось?

1 ответ

Почему Amazon SES выдает эту ошибку при отправке электронной почты?

Например, вы подтвердили свой домен example.com. Теперь кто-то@yahoo.com отправляет электронное письмо на myaccount@example.com. Postfix с радостью принимает его, и из-за файла псевдонимов postfix перешлет его на otheraccount@gmail.com.

Проблема заключается в том, что postfix использует кого-то@yahoo.com в качестве отправителя конверта в транзакции SMTP. Это желаемое и стандартное поведение postfix. Цель состоит в том, чтобы не потерять информацию об отправителе, когда GMAIL получит это электронное письмо от somebody@yahoo.com. К сожалению, Amazon SES разрешает домен отправителя конверта только как example.com.

Решение

Из потока, упомянутого OP в комментарии, есть несколько решений для изменения отправителя конверта, чтобы он проходил ограничение Amazon SES. Одним из возможных решений является использование sender_canonical_maps. По умолчанию postfix переписывает и отправителя в конверте, и в заголовке. При правильной настройке sender_canonical_classes, postfix будет перезаписывать только конверт.

В /etc/postfix/main.cf, добавлять

sender_canonical_maps = regexp:/etc/postfix/sender_canonical
sender_canonical_classes = envelope_sender

В /etc/postfix/sender_canonical, добавлять

/.*/    mysenderaddress@example.com

Проблема в том, что ваш оригинальный отправитель неизвестен. Одним из способов получения оригинала является действие prepend с check_sender_access, предложенное автором Postfix.

В /etc/postfix/main.cf, добавлять

smtpd_data_restrictions = check_sender_access pcre:/etc/postfix/sender_access

В /etc/postfix/sender_access, добавлять

/(.*)/  prepend X-Envelope-From: <$1>

Эти настройки добавят X-Envelope-From заголовок, который будет содержать оригинальный адрес электронной почты отправителя.

Когда возникает эта проблема, где заканчивается электронная почта? Куда это делось?

По умолчанию postfix отправит это сообщение исходному отправителю (адрес Yahoo). Вы можете отследить это, следуя mail.log после отказа. Конечно, некоторые настройки постфикса могут подавить сообщение о сбое, или, возможно, Yahoo молча отвергает его.

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