Bamboo Mailer搭配SES向特定用户发信报错501 Invalid RCPT TO问题咨询
SES RCPT TO地址有效性校验核心规则
SES对收件人地址的校验标准严格于普通公共邮件服务商,核心规则如下:
- 基础格式校验:严格遵循RFC 5322标准,不允许地址包含未编码的非ASCII字符、连续特殊符号、本地部分(@前内容)长度超过64字符、域名部分(@后内容)长度超过255字符,同时不支持IP格式的域名后缀(如
user@[1.1.1.1]) - 域名解析校验:发信前会实时校验收件人域名的MX记录是否存在、可正常解析,解析失败会直接返回无效
- 全局名单校验:如果该地址曾产生过大量退信、 spam投诉,会被纳入SES全局拒收名单,即使格式正确也会被判定无效
- 特殊字符编码校验:如果地址本地部分包含
+、.之外的特殊符号,未经过RFC 2047编码的地址会被直接拦截 - 沙箱限制校验:如果SES账号仍处于沙箱环境,仅能向已验证的收件人地址发信,未验证地址会被判定无效,若你的业务日均发信1000封可排除该情况
SES SMTP发信通用工作逻辑
- 发信客户端(你使用的Bamboo smtp_adapter)发起SMTP握手,提交SES的SMTP身份凭证完成校验
- SES校验发件人地址是否为账号下已验证的身份,同时校验是否符合SPF、DKIM的配置要求
- 按上述规则校验所有RCPT TO地址的有效性,任意地址不通过直接返回对应错误
- 收件地址校验通过后,SES向收件人域名对应的MX服务器发起投递请求
- 投递完成后记录投递状态,同步到SES控制台的监控面板
该报错的可落地排查方案
- 先打印完整的发信请求参数,确认提交到SES的收件人地址是否携带不可见的特殊字符,比如零宽空格
\u200b、末尾空白符、换行符,这类字符本地肉眼排查很难发现,但会触发SES的格式校验 - 绕过Bamboo库直接调用AWS SES原生接口发测试信,排除第三方库的参数编码问题,可使用如下命令测试,替换对应参数即可:
若CLI调用仍报相同错误,可100%确认是SES侧拦截,否则为Bamboo的参数编码问题aws ses send-email --from 你的已验证发件地址 --destination ToAddresses=目标收件地址 --message 'Subject={Data=测试邮件},Body={Text={Data=测试内容}}' - 在和SES同区域的云服务器上用nslookup手动解析目标收件地址的域名MX记录,确认是否存在SES全球解析节点无法识别的小众私有DNS配置
- 若上述排查均无问题,可提交AWS工单确认该地址是否被误纳入SES全局拒收名单,申请白名单解除拦截
内容的提问来源于stack exchange,提问作者tfantina
相关产品推荐
相关产品推荐

