AWS sendCustomVerificationEmail无法发送邮件问题求助
问题排查与解决方案
核心现象
调用AWS SES的sendCustomVerificationEmail接口返回200状态码和有效MessageId,但目标邮箱始终收不到验证邮件,此前功能正常,约1个月前突然失效,更换多个邮箱地址均无效。
逐步排查方向
1. 验证自定义邮件模板状态与内容
- 登录AWS控制台,进入SES服务的验证邮件模板页面,确认目标模板处于已启用状态。
- 检查模板内容必须包含
{VerifyLink}占位符,缺失该占位符会导致邮件无法生成有效验证链接,进而被SES拦截或无法正常投递。
2. 核查SES账户状态与发送限制
- 查看SES控制台的发送统计面板,确认退信率(需<5%)、投诉率(需<0.1%)未触发AWS的发送限制阈值,一旦超出,SES会静默限制邮件投递。
- 确认账户是否仍处于沙箱模式:沙箱模式下仅能向已在SES验证过的邮箱地址发送邮件,需先验证目标邮箱地址,或申请移出沙箱。
3. 通过MessageId查询邮件投递详情
- 使用返回的
MessageId在SES控制台的邮件查询功能中搜索,查看邮件的具体流转状态:- 若显示「已投递」:大概率被收件方邮箱服务商拦截,需检查邮件内容是否包含垃圾邮件特征(如敏感关键词、异常链接)。
- 若显示「被拒收/丢弃」:需排查收件方域名的SPF/DKIM配置,或SES账户是否被列入ISP黑名单。
4. 验证自定义链接的合规性
- 确认模板中
{VerifyLink}生成的链接域名已在SES完成DKIM、SPF验证,未验证的域名会导致邮件被收件方判定为伪造邮件。 - 手动访问生成的验证链接,确认链接可正常跳转且无安全提示(如浏览器标记为恶意网站)。
5. 检查区域与资源一致性
- 代码中调用的是
us-east-1区域的SES端点,需确认自定义验证模板、已验证域名等资源均创建在同一区域,跨区域调用可能导致隐性问题。
6. 补充代码错误捕获
当前代码未处理异常,建议添加捕获逻辑以排查潜在隐性错误:
try { $data = $ses->sendCustomVerificationEmail([ 'EmailAddress' => $verifyEmail, 'TemplateName' => 'TemplateName' ]); print_r($data); } catch (Aws\Ses\Exception\SesException $e) { echo "SES错误信息: " . $e->getMessage(); }
内容的提问来源于stack exchange,提问作者Alexey Ignatyev
相关产品推荐
相关产品推荐

