使用Boto3调用AWS SES发送邮件时HTML代码直接显示问题求助
搞定AWS SES发送HTML邮件显示源码的问题
嘿,你遇到的问题其实是SES邮件Body字段的使用误区啦!你现在的代码里犯了两个小错误,导致HTML内容被当成纯文本发送,客户端才会直接显示源码:
问题出在哪?
- 你在
Body里重复写了两次Text键——Python字典里重复的键会被最后一个覆盖,所以实际发送的是那段HTML代码,但因为是放在Text字段里,SES会把它标记成text/plain类型,客户端自然就直接显示代码了。 ToAddresses参数需要传列表,你写的单个字符串可能会触发报错,这个也顺手改了吧。
修正后的代码
from boto3 import client conn = client('ses', region_name='us-east-1') conn.send_email( Source=from_addr, Destination={'ToAddresses': ['x@x.com']}, # 改成列表格式 Message={ 'Subject': {'Data': self.subject, 'Charset': 'UTF-8'}, 'Body': { 'Text': {'Data': 'Hello', 'Charset': 'UTF-8'}, # 给不支持HTML的客户端留的纯文本 fallback 'Html': {'Data': '<html>Hello</html>', 'Charset': 'UTF-8'} # HTML内容专门放在Html字段里 } } )
核心要点
SES的send_email方法里,Body支持同时定义Text和Html两个字段:
- 用
Html字段存放你的HTML内容,SES会自动为这部分设置Content-Type: text/html,客户端就会正确渲染HTML了。 Text字段是纯文本 fallback,方便那些不支持HTML的邮件客户端显示内容,当然如果不需要也可以只保留Html字段。
这样修改之后,你再发邮件,客户端就会正常显示渲染后的HTML内容啦!
内容的提问来源于stack exchange,提问作者slysid
相关产品推荐
相关产品推荐

