使用Boto3调用SES发邮件遇到AWS签名版本4错误该如何解决
问题排查修复步骤
1. 优先检查凭证类型是否匹配
你按照SMTP凭证教程创建的凭证仅适用于通过SMTP协议连接SES的场景,Boto3作为AWS SDK调用SES接口时,需要使用IAM用户的访问密钥对(Access Key ID + Secret Access Key),而非SMTP凭证。如果你的配置项中填入的是SMTP凭证的值,直接替换为对应IAM用户的访问密钥即可解决绝大多数这类签名错误。
2. 其他常见问题排查
- 校验IAM权限:确认使用的IAM用户已经附加了允许SES发信的权限策略,需要至少包含
ses:SendEmail、ses:SendRawEmail的操作权限。 - 校验配置项正确性:检查
settings.py中存储的访问密钥没有前后多余的空格、换行符,不要填反Access Key ID和Secret Access Key,也不要遗漏Secret Access Key的任意字符。 - 校验区域一致性:确认
AWS_SES_REGION_NAME的配置值和你SES发件人地址/域名所在的开通区域一致,区域不匹配也会触发签名校验失败。 - 手动指定签名版本:部分特殊场景下默认签名版本不兼容,可以手动指定SigV4签名,修改初始化代码如下:
from botocore.config import Config client = boto3.client( 'ses', region_name=settings.AWS_SES_REGION_NAME, aws_access_key_id=settings.AWS_SES_ACCESS_KEY_ID, aws_secret_access_key=settings.AWS_SES_SECRET_ACCESS_KEY, config=Config(signature_version='s3v4') )
- 检查服务器时间同步:AWS签名算法要求请求方时间和AWS服务器时间差不超过15分钟,如果部署应用的服务器时间偏移过大,同步系统时间即可解决。
内容的提问来源于stack exchange,提问作者Anndreh
相关产品推荐
相关产品推荐

