运行AWS SES Python发信示例报ses_identities模块缺失错误
报错原因
这个报错和你是否安装boto3没有关系。ses_identities不是PyPI源上可通过pip安装的第三方依赖包,而是AWS示例代码库中,和你运行的发邮件脚本同目录存放的自定义本地工具模块。如果你只单独保存了这一个发邮件脚本到本地运行,Python解释器在脚本所在路径以及系统依赖路径下都找不到这个配套模块文件,就会抛出该导入错误。
解决方法
你可以根据自己的需求选以下任意一种方案处理:
- 方案1:移除冗余依赖,直接使用无额外依赖的最小可用发邮件代码
官方示例的模块化封装只是为了代码复用,发邮件本身只需要boto3即可完成,你可以直接删除原有脚本里所有和ses_identities相关的导入、调用代码,替换为原生boto3调用逻辑,参考实现如下:
import boto3 from botocore.exceptions import ClientError def send_ses_email(): # 替换为你实际使用的SES区域,例如us-east-1 ses = boto3.client("ses", region_name="替换为你的AWS区域") # 替换为你在SES完成验证的发件人地址 sender_addr = "发件人名称 <verified-sender@example.com>" # 替换为收件人地址,沙箱模式下收件人也需要提前验证 receiver_addr = "recipient@example.com" email_content = { "Source": sender_addr, "Destination": {"ToAddresses": [receiver_addr]}, "Message": { "Subject": {"Data": "SES测试邮件", "Charset": "UTF-8"}, "Body": { "Text": {"Data": "这是通过Amazon SES发送的纯文本测试内容", "Charset": "UTF-8"}, "Html": {"Data": "<p>这是通过Amazon SES发送的HTML测试内容</p>", "Charset": "UTF-8"} } } } try: resp = ses.send_email(**email_content) print(f"邮件发送成功,消息ID:{resp['MessageId']}") except ClientError as e: print(f"邮件发送失败:{e.response['Error']['Message']}") if __name__ == "__main__": send_ses_email()
- 方案2:补全本地缺失的配套模块
如果你需要保留原有官方示例的代码结构,可以在你运行的ses_email.py同级目录下,新建名为ses_identities.py的文件,根据原脚本里调用的该模块的方法,自行实现对应逻辑即可。 - 方案3:完整下载整套示例代码
如果你需要运行整套SES相关的官方示例,不要单独保存单个脚本文件,要把示例所属的整个代码目录完整下载到本地,保证所有关联的模块文件和入口脚本的相对路径和官方仓库结构一致,Python就能正常找到对应的本地模块。
注意:如果你的SES账号还处于沙箱模式,所有发件人、收件人地址都必须提前在SES控制台完成身份验证,否则即使代码运行正常也会被拒绝投递。
内容的提问来源于stack exchange,提问作者SrTan
相关产品推荐
相关产品推荐

