Устранение неполадок отправки писем через SMTP в Amazon AWS SES

У меня возникли трудности с переходом от SendGrid к Amazon SES.

Не мог бы кто-нибудь любезно поделиться своими настройками из app.yml или подтвердить, что мои настройки верны?

  ## TODO: SMTP-сервер, используемый для проверки новых учетных записей и отправки уведомлений
  DISCOURSE_SMTP_ADDRESS: email-smtp.eu-west-2.amazonaws.com
  DISCOURSE_SMTP_PORT: 587
  DISCOURSE_SMTP_USER_NAME: xxxxxxx
  DISCOURSE_SMTP_PASSWORD: "xxxxxxxxxx"
  DISCOURSE_SMTP_ENABLE_START_TLS: true           # (необязательно, по умолчанию true)
  DISCOURSE_SMTP_AUTHENTICATION: login

Правильно ли указан здесь параметр аутентификации?

Не упустил ли я что-то?

Домен подтвержден в SES, поэтому параметр аутентификации SMTP не требуется.

Кроме того, возможно, вам потребуется вывести ваш аккаунт SES из режима песочницы, если это еще не сделано, и запросить увеличение лимитов. Ограничения режима песочницы применяются в разрезе каждого региона.

Да, подтверждено: домен верифицирован, работает в режиме продакшена, а лимиты запросов увеличены.

Остальное выглядит правильно? :thinking:

Да, остальные настройки, на мой взгляд, верны.

И нормально, что пароль заключен в «кавычки»?

Да, это тоже должно подойти

Хм…

Есть ли способ протестировать из командной строки?

Я каждый раз также пересобираю своё приложение.

Спасибо за быстрые ответы :+1:t2:

И это тоже выглядит правильно? (Я закомментировал строку аутентификации, как вы и предлагали)

Я до сих пор не понимаю, почему письма не отправляются через AWS SES.

Когда я отправляю тестовое письмо через админ-страницу нашего Discourse, там просто пишется «отправлено». Попытка запроса восстановления пароля также проходит все необходимые шаги, но письмо так и не приходит.

Кажется, что в SES нет логов, поэтому я не могу проверить, получает ли он письма вообще.

Единственное, что может вызывать проблему, — это то, что адрес для ответов использует аккаунт gmail.com, а не домен нашего сайта.

Столкнулся ли кто-нибудь с такой комбинацией или сценарием ранее?

Это тот адрес, который будет указан в строке «От кого». Он должен быть адресом в домене, из которого SES будет отправлять письма. SES не будет отправлять письма, которые притворяются исходящими от gmail. У вас нет контроля над gmail.com, поэтому SES не отправит письмо с этим доменом в строке «От кого». notification_email должен быть в формате что-то@вашподтвержденныйдомен

Я задавался вопросом, не может ли быть что-то подобное.

Моя текущая настройка SendGrid работает уже много лет и включает следующее:

Вы имеете в виду, что то, что я пытаюсь сделать, просто невозможно в SES из-за того, что адрес для ответов находится в домене gmail.com?

Уведомление по электронной почте — это то, что указано в строке «От кого», и да, я вполне уверен, что это ваша проблема. Вы пробовали изменить это?

Я тоже использую SES, и у меня всё работает отлично. Единственное различие, которое я вижу в сравнении с вашей конфигурацией, — у меня отсутствует строка DISCOURSE_SMTP_AUTHENTICATION: login. Также у меня закомментированы параметры DISCOURSE_SMTP_ENABLE_START_TLS: true и DISCOURSE_SMTP_PORT: 587, хотя это не должно влиять на работу.

В файле app.yml я изменяю только три строки: SMTP-адрес, имя пользователя и пароль. Остальное закомментировано по умолчанию, как при чистой установке. После пересборки мне нужно лишь убедиться, что в настройках сайта параметр «notification email» установлен на адрес, использующий домен, верифицированный в SES. Я больше не использую кавычки для пароля, но в моих старых установках они были, и всё работало в любом случае.

Да, стоит попробовать изменить адрес ответа (reply-to) на адрес, использующий верифицированный домен SES, как рекомендовано в предыдущем ответе, просто чтобы проверить, начнёт ли письмо отправляться корректно.

Если это не поможет, проверьте, не блокирует ли ваш хост некоторые порты, и ещё раз убедитесь, что учётные данные SES сгенерированы правильно. Я вижу, что выше вы подтвердили, что ваш домен верифицирован в SES.

Спасибо за подробную информацию @markersocial :+1:t2:

Можно спросить, отличается ли домен вашего адреса «Reply-to» от домена адреса «From»? :thinking:

Не переживайте :slight_smile:

Адрес для ответов находится в том же домене, что и домен отправителя, да, но в некоторых случаях это не тот же поддомен (хотя корневой домен всё тот же). Оба варианта у меня работают отлично.

Уверен, вы это заметили — проверили ли вы исходящий адрес электронной почты, который Discourse использует для отправки?Если это notify@вашпроверенныйдомен, вам нужно зайти в SES, во вторую строку под «Управление идентификаторами», добавить и затем подтвердить отправляющий адрес. Ничего не отправится, пока вы этого не сделаете.Никаких тревог, никаких сирен — просто ничего не происходит.Ответ с Gmail — это отлично. Я поступил именно так. Тогда письма с авторизацией для участников попадали в спам, потому что адреса From и Reply не совпадали.В итоге я написал простой AWS Lambda (потребовалась неделя, чтобы разобраться), который пересылает входящие письма в API Discourse. Очень чисто. Никакого Postfix.