Отправка писем с учетными данными SMTP через Amazon SES работает… Но не из Discourse

Я настроил 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.

Документация по идентификаторам доступна здесь:

Ах, да, как описано здесь:

Сначала я этого не понял. Давайте попробуем добавить мой адрес Gmail в качестве подтверждённого адреса в SES.

Насколько я знаю, использовать ±адреса в SES нельзя. Но я каждый день пользуюсь SES через Discourse.

Я подтвердил monocycle.info@gmail.com, и Discourse может отправлять письма пользователям. Функция ответа по электронной почте также работает.
В ближайшие дни я проверю, не возникнет ли у меня проблем.

Можете ли вы немного уточнить? Имеется в виду то, что я только что написал (кажется, всё работает). :slight_smile:

Это два разных момента:

  • SES не может использовать адреса с «+» (я точно не помню правильный термин для этой формы) для входящего или исходящего трафика.
  • Я постоянно отправляю письма из Discourse через SES.

Когда я пытался использовать создание/ответ по электронной почте, мне приходилось использовать Gmail из-за этого.

Это актуально для вас? У меня нет ни малейшего представления :man_facepalming:

О, хорошо, спасибо за разъяснение. Я не использую адреса с ± для SES, поэтому, думаю, в моём случае это не актуально. :slight_smile:

В Amazon их называют «метками» (labels), если вы имеете в виду адреса вида user+label@domain. Не помню, является ли это официальным термином для электронной почты или это только терминология Amazon. Вы уверены, что они не поддерживаются? Такие адреса довольно часто используются пользователями.

Единственное, что я нашёл в документации, — это то, что расширение SMTPUTF8 не поддерживается, что ограничивает локальную часть (до символа @) 7-битными символами ASCII 7-bit ASCII characters. Это включает в себя и символ +.

Нет, не нужно, но +verp… действует как таковой. Или я полностью ошибаюсь?

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


Моя настройка «ответ по электронной почте» действительно указывает на адрес Gmail, использующий символ «+» и подобные уловки.

Если настройка ответ по электронной почте отключена, то отправка писем через Discourse работает (если я правильно помню).

Если настройка ответ по электронной почте включена, и я не верифицировал адрес Gmail в SES, то Discourse не будет отправлять никакие письма — независимо от того, указан ли в них адрес Gmail в поле «ответить» или нет (например, тестовое письмо или дайджест не содержат адреса Gmail в поле «ответить»). При этом возникнет ошибка: 554 Message rejected: Email address is not verified.

Если же я верифицирую адрес Gmail в SES, то все письма, отправляемые Discourse, работают корректно — независимо от того, указан ли в них адрес Gmail в поле «ответить» или нет.

Конечно, мне было бы полезно узнать чуть больше о том, как всё это работает, но пока всё функционирует… Это моя главная забота. :smile: