使用AWS SES发送邮件遭遇SignatureDoesNotMatch错误求排查
问题原因及解决方法
核心错误
你误用了SMTP专用凭证来调用AWS SES API。从SES控制台SMTP设置生成的凭证是用于SMTP协议发送邮件的,和AWS API调用所需的IAM Access Key/Secret Key不是同一套,这直接导致签名验证失败。
解决步骤
- 创建IAM用户:进入IAM控制台,新建一个用户,为其分配SES相关权限(比如
AmazonSESFullAccess,或仅允许发送邮件的精细权限) - 获取正确凭证:从该IAM用户的安全凭证页面,生成并获取Access Key ID(20位)和Secret Access Key(约40位,而非SMTP的44位密钥)
- 替换代码凭证:将代码中的
awsSesID和awsSesSecret替换为上述IAM用户的凭证
备选方案(若坚持用SMTP凭证)
如果想使用SMTP凭证发送邮件,需改用SMTP协议而非SES SDK,示例代码框架如下:
import "net/smtp" func main() { auth := smtp.PlainAuth("", "SMTP_USERNAME", "SMTP_PASSWORD", "email-smtp.<你的区域>.amazonaws.com") err := smtp.SendMail("email-smtp.<你的区域>.amazonaws.com:587", auth, "from@example.com", []string{"to@example.com"}, []byte("邮件内容")) // 处理错误逻辑 }
内容的提问来源于stack exchange,提问作者Don Tomato
相关产品推荐
相关产品推荐

