ruby-on-rails - AWS SNS 退回通知未发送
问题描述
我有一个托管在 AWS 上的 Rails 4.2 应用程序,它使用 SES 传递电子邮件。我已将 SNS 设置为在电子邮件退回时向应用程序发布通知。如果我通过 SES 控制台发送测试电子邮件,则与 SNS 订阅关联的端点会完全按照预期被 AWS 击中,并带有退回通知。当从应用程序本身发送的电子邮件退回时,不会命中端点,尽管 SES 控制台中显示的电子邮件统计信息中似乎存在相应的退回。
如果从应用程序发送带有Return-Path
的电子邮件,则与返回路径关联的电子邮件确实会收到来自 SES 邮件程序守护程序的“交付状态通知(失败)”消息(尽管该电子邮件确实会进入垃圾邮件)。我还检查了 Apache access_log
,error_log
并且仅在通过 SES 控制台发送电子邮件时看到退回通知端点命中。
应用程序中的电子邮件通过 ActionMailer 发送,带有delivery_strategy
of :aws_sdk
(由aws-sdk-rails
gem 提供)。我还尝试使用:smtp
withemail-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 文档中进行了大量搜索,但没有发现任何改变这种行为的东西。任何有关如何在应用程序发送时获得退回通知的提示将不胜感激。
解决方案
如果您使用简单邮件服务验证的电子邮件地址发送电子邮件,请确保您的通知主题已针对该电子邮件地址进行配置。如果它只为您的域配置,那么它将不起作用。
我遇到了你描述的同样的问题,这是因为我只在我的域名上配置了通知,而不是在电子邮件地址上。
推荐阅读
- spring-boot - 在 JPA 存储库中的 findAll() 之后调用 Save()
- firebase - Unity / iOS App中的Firebase身份验证,无需电子邮件和密码
- c++ - 我有一个问题,我一直在尝试 LeetCode,需要帮助解决超出时间限制的错误
- css - CSS模板未在jsPsych中加载
- r - 基于条件的闪亮地块
- visual-c++ - 将静态本机库链接到托管 C++ 项目会在
- flutter - 当用户拖动到其开始或结束时(出现弯曲的蓝线时)如何向 ListView 添加特定操作?
- mysql - 如何在locate中使用MySql Regex?
- python - 如何让 Poppler 在 Windows 上运行
- reactjs - 我对反应路由器的相对路径有困难。基本路径从位置栏中消失