首页 > 解决方案 > AWS SNS 退回通知未发送

问题描述

我有一个托管在 AWS 上的 Rails 4.2 应用程序,它使用 SES 传递电子邮件。我已将 SNS 设置为在电子邮件退回时向应用程序发布通知。如果我通过 SES 控制台发送测试电子邮件,则与 SNS 订阅关联的端点会完全按照预期被 AWS 击中,并带有退回通知。当从应用程序本身发送的电子邮件退回时,不会命中端点,尽管 SES 控制台中显示的电子邮件统计信息中似乎存在相应的退回。

如果从应用程序发送带有Return-Path的电子邮件,则与返回路径关联的电子邮件确实会收到来自 SES 邮件程序守护程序的“交付状态通知(失败)”消息(尽管该电子邮件确实会进入垃圾邮件)。我还检查了 Apache access_logerror_log并且仅在通过 SES 控制台发送电子邮件时看到退回通知端点命中。

应用程序中的电子邮件通过 ActionMailer 发送,带有delivery_strategyof :aws_sdk(由aws-sdk-railsgem 提供)。我还尝试使用:smtpwithemail-smtp.us-east-1.amazonaws.com和 SES 凭证的交付策略——这两种策略之间的唯一区别是该:smtp策略未能遵循Return-Path. “发件人”地址中使用的域和电子邮件均已通过 AWS 验证,并且 DKIM 已启用、验证并且似乎正在运行。该域的 Bounce Notifications SNS 主题是正确的(并且该主题的订阅已得到确认)。

我已经测试了将电子邮件发送到具有不存在域的地址、具有真实域的不存在地址和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 文档中进行了大量搜索,但没有发现任何改变这种行为的东西。任何有关如何在应用程序发送时获得退回通知的提示将不胜感激。

标签: ruby-on-railsamazon-web-servicesemailamazon-snsamazon-ses

解决方案


如果您使用简单邮件服务验证的电子邮件地址发送电子邮件,请确保您的通知主题已针对该电子邮件地址进行配置。如果它只为您的域配置,那么它将不起作用。

我遇到了你描述的同样的问题,这是因为我只在我的域名上配置了通知,而不是在电子邮件地址上。


推荐阅读