Symfony Mailer通过AWS SES发送邮件报535认证凭证无效错误
你遇到的535 Authentication Credentials Invalid错误是SMTP服务端判定认证凭证无效导致的,结合AWS SES的使用场景,常见原因和排查解决方法如下:
常见原因
- 凭证类型误用:AWS SES的SMTP凭证和普通IAM用户的访问密钥是两套体系,直接将IAM访问密钥填入DSN会认证失败。
- 区域不匹配:你配置中使用的是eu-central-1区域的SES SMTP端点,生成的SMTP凭证必须属于同一区域,跨区域凭证无法使用。
- 特殊字符未转义:如果SMTP密码中包含
+、/、@、:这类URL特殊字符,未做URL编码会被DSN解析器截断,导致实际传入的密码错误。 - IAM权限缺失:SMTP凭证关联的IAM用户没有
ses:SendRawEmail权限,也会触发认证失败错误。 - SES沙箱限制:如果你的SES账号还处于沙箱环境,发件人和收件人地址都需要先在SES控制台完成验证,否则也可能触发类似报错。
排查解决步骤
- 确认凭证正确性:进入AWS SES控制台eu-central-1区域的「SMTP设置」页面,单独生成SMTP凭证,替换DSN中的XXX和YYY。
- 转义特殊字符:如果SMTP密码包含URL特殊字符,先对密码做URL编码后再填入DSN。
- 补全IAM权限:给SMTP凭证关联的IAM用户附加包含
ses:SendRawEmail操作的权限策略。 - 适配沙箱规则:处于沙箱环境时,先将代码中使用的发件地址
hello@example.com和收件地址you@example.com都添加到SES的验证地址列表,完成验证后再测试;需要发往任意地址可申请脱离SES沙箱。 - 明确DSN加密参数:465端口为隐式TLS端口,可修改DSN为
smtp://XXX:YYY@email-smtp.eu-central-1.amazonaws.com:465?encryption=ssl&auth_mode=login,避免Symfony自动识别加密规则出错。 - 本地测试凭证:用桌面邮件客户端填入相同的SMTP地址、端口、凭证测试发信,排除代码层面的配置问题。
内容的提问来源于stack exchange,提问作者dosad
相关产品推荐
相关产品推荐

