boto3 ses InvalidParameterValue 错误由于 unicode 字符

Posted

技术标签:

【中文标题】boto3 ses InvalidParameterValue 错误由于 unicode 字符【英文标题】:boto3 ses InvalidParameterValue error due to unicode characters 【发布时间】:2017-05-08 13:33:56 【问题描述】:

我正在尝试使用 boto3 通过 SES 发送电子邮件。下面是我的代码。

from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

import boto3

message = MIMEMultipart()
message['Subject'] = 'i am subject äöü'
message['From'] = 'sender äöü <from@email.com>'
message['To'] = 'receipient äöü <to@email.com>'
html = MIMEText('<strong>Welcome to AWS SES äöü</strong>', 'html')
message.attach(html)

ses.send_raw_email(
    RawMessage=
        'Data': message.as_string()
    
)

但我在下面遇到了异常。此错误与FromTo 地址中的Unicode 字符(äöü) 有关。如果我删除 unicode 字符,则电子邮件发送成功。

调用时发生错误(InvalidParameterValue) SendRawEmail 操作:缺少最终的“@domain”

请帮助解决问题。

【问题讨论】:

【参考方案1】:

根据SES documentation:

如果您想在“友好发件人”名称中使用 Unicode 字符,则必须使用 MIME 编码字语法对“友好发件人”名称进行编码,如使用 Amazon SES API 发送原始电子邮件中所述。

一种方法:

from email.header import Header

msg['Subject'] = Header('helloé éé', 'utf-8').encode()
# '=?utf-8?b?aGVsbG/DqSDDqcOp?='

【讨论】:

【参考方案2】:

按照https://mg.pov.lt/blog/unicode-emails-in-python.html 中的建议对电子邮件部分进行编码。这解决了问题,现在我可以发送电子邮件了。

【讨论】:

以上是关于boto3 ses InvalidParameterValue 错误由于 unicode 字符的主要内容,如果未能解决你的问题,请参考以下文章

需要 boto3 和 SWF 示例

boto3:Spot 实例创建

Boto3 CloudFormation 状态

AWS 成本浏览器 boto3

使用 Boto3 基于 AMI 创建 EMR 集群

使用 Python 和 Boto3 获取列表集群 Amazon Redshift