Я настроил Amazon SES.
Я вышел из режима песочницы, что означает, что я могу отправлять письма на непроверенные адреса.
Из документации Amazon SES:
Когда ваш аккаунт выходит из режима песочницы, вы можете отправлять электронные письма любому получателю, независимо от того, проверен ли адрес или домен получателя. Однако вам по-прежнему необходимо проверить все идентификаторы, которые вы используете в качестве адресов «From», «Source», «Sender» или «Return-Path»..
Я также настроил свои учетные данные SMTP.
Отправка тестового письма непроверенному получателю работает из панели управления Amazon S3 или любого другого инструмента тестирования SMTP.
Однако это не работает в Discourse.
app.yml:
DISCOURSE_SMTP_ADDRESS: email-smtp.eu-west-3.amazonaws.com
DISCOURSE_SMTP_PORT: 587
DISCOURSE_SMTP_USER_NAME: AKIA****************
DISCOURSE_SMTP_PASSWORD: "*************************************"
#DISCOURSE_SMTP_ENABLE_START_TLS: true # (опционально, по умолчанию true)
DISCOURSE_SMTP_DOMAIN: forum.monocycle.info # (адрес, с которого отправляются уведомления)
DISCOURSE_NOTIFICATION_EMAIL: noreply@forum.monocycle.info # (адрес, с которого отправляются уведомления)
Когда я отправляю тестовое письмо из Discourse, письмо отклоняется с сообщением об ошибке:
554 Письмо отклонено: адрес электронной почты не проверен. Следующие идентификаторы не прошли проверку в регионе EU-WEST-3: monocycle.info+verp-3a76559e11c2b9a318165af8eb968f22@gmail.com…
Конечно, я пересобрал приложение после изменения app.yml.
Есть ли какие-либо идеи, почему возникает эта проблема, и как её решить?
Сообщение об ошибке указывает на то, что вам нужно создать идентификатор для monocycle.info@gmail.com и подтвердить его. Обратите внимание, что подтверждать метку (+verp-...) не требуется, так как все метки принимаются, если адрес подтверждён без метки.
Причина этого в том, что адрес «Reply-By» используется как адрес Return-Path, один из типов адресов, которые, как вы указали, требуют подтверждения.
Я не уверен, почему отправка другими способами работает, но думаю, что ваш тестовый инструмент панели управления Amazon и SMTP, вероятно, сработал, потому что они отправляли письма на ваш адрес «Reply-By», а не использовали его как адрес Reply-To/Return-Path, как это делает Discourse.
Я подтвердил monocycle.info@gmail.com, и Discourse может отправлять письма пользователям. Функция ответа по электронной почте также работает.
В ближайшие дни я проверю, не возникнет ли у меня проблем.
Можете ли вы немного уточнить? Имеется в виду то, что я только что написал (кажется, всё работает).
В Amazon их называют «метками» (labels), если вы имеете в виду адреса вида user+label@domain. Не помню, является ли это официальным термином для электронной почты или это только терминология Amazon. Вы уверены, что они не поддерживаются? Такие адреса довольно часто используются пользователями.
Единственное, что я нашёл в документации, — это то, что расширение SMTPUTF8 не поддерживается, что ограничивает локальную часть (до символа @) 7-битными символами ASCII 7-bit ASCII characters. Это включает в себя и символ +.
Ну что ж, мои ответы могут быть немного неточными, так как я мало понимаю в вопросах, связанных с электронной почтой.
Моя настройка «ответ по электронной почте» действительно указывает на адрес Gmail, использующий символ «+» и подобные уловки.
Если настройка ответ по электронной почте отключена, то отправка писем через Discourse работает (если я правильно помню).
Если настройка ответ по электронной почте включена, и я не верифицировал адрес Gmail в SES, то Discourse не будет отправлять никакие письма — независимо от того, указан ли в них адрес Gmail в поле «ответить» или нет (например, тестовое письмо или дайджест не содержат адреса Gmail в поле «ответить»). При этом возникнет ошибка: 554 Message rejected: Email address is not verified.
Если же я верифицирую адрес Gmail в SES, то все письма, отправляемые Discourse, работают корректно — независимо от того, указан ли в них адрес Gmail в поле «ответить» или нет.
Конечно, мне было бы полезно узнать чуть больше о том, как всё это работает, но пока всё функционирует… Это моя главная забота.