Уведомления о сбое AWS SNS не доставляются - PullRequest
0 голосов
/ 16 февраля 2019

У меня есть приложение Rails 4.2, которое размещено на AWS и использует SES для доставки электронной почты.Я настроил уведомления SNS и POST для приложения, когда электронная почта возвращается.Если я отправляю тестовое электронное письмо через консоль SES, конечная точка, связанная с подпиской SNS, попадает в AWS точно так же, как и ожидалось с уведомлением об отказе.Когда электронное письмо, полученное от самого приложения, отскакивает, конечная точка не попадает, хотя в статистике электронной почты, отображаемой в консоли SES, появляется соответствующий отскок.

Если электронное письмо отправлено из приложенияпри значении Return-Path электронное письмо, связанное с обратным путем, действительно получает сообщение «Уведомление о состоянии доставки (сбой)» от демона почтовой программы SES (хотя это электронное письмо переходит в спам).Я также проверил Apache access_log и error_log и вижу попадание в конечную точку уведомления о возврате только при отправке писем через консоль SES.

Письма в приложении отправляются через ActionMailer с delivery_strategy:aws_sdk (предоставлено драгоценным камнем aws-sdk-rails).Я также пытался использовать стратегию доставки :smtp с email-smtp.us-east-1.amazonaws.com и учетными данными SES - единственное различие между двумя стратегиями состоит в том, что стратегия :smtp не соответствует Return-Path.Домен и электронная почта, используемые в адресе «От», проверены с помощью AWS, а DKIM включен, проверен и, похоже, работает.Тема SNS для Bounce Notifications для домена является правильной (и подписка на тему уже подтверждена).

Я проверил доставку электронной почты на адреса с несуществующими доменами, несуществующие адреса с реальными доменами.и bounce@simulator.amazonses.com.Все тесты с приложением приводят к тому, что ничего не отправляется в конечную точку уведомления, а все тесты с консолью SES приводят к ожидаемому поведению.Все сервисы Amazon используют один и тот же регион (us-east-1), и все электронные письма, которые, как ожидается, будут доставлены без пересылки, будут доставлены надлежащим образом.

Код, который доставляет почту, выглядит в основном так:

class SomeMailer < ApplicationMailer
  def some_email
    ...
    mail(
      to: destination,
      from: sender,
      cc: cc_addresses,
      subject: some_subject,
      template_name: some_template,
      return_path: return_path_email
    )
  end
end

Я пытался убрать return_path, который не влияет на поражение конечной точки SNS.

Я провел немало поиска здесь, в документах и ​​убежище AWS.не нашел ничего, что меняет это поведение.Будем весьма благодарны за любые советы о том, как получать уведомления об отказах при отправке приложением.

...