使用charset编码UTF-8发送电子邮件 - Python + boto3

时间:2015-10-23 13:50:59

标签: python encoding utf-8 boto aws-lambda

我正在使用S3 Lambda(python + boto3)+ AWS SES来创建自动回复电子邮件。

从我的电脑发送电子邮件一切正常。我可以在电子邮件中看到正确的字符串。 “Olá,meunomeéPedro”。如果我打印到python中的控制台,仍然在我的电脑中,字符串也可以。

当从lambda触发电子邮件时,我会收到charset enconding / decode问题,例如“Olá,meunomeéPedro”。 如果在lambda s3控制台的python里面,我打印出来的时候看到错误的字符串:“Olá,meunomeéPedro”

我是否需要在电子邮件标题中设置其他属性?

请参阅以下源代码:

# -*- coding: utf-8 -*-
body = u"Olá, meu nome é Pedro"               
body = body.encode('UTF-8')
response = client.send_email(
    Source='teste@emporiodacerveja.com.br',
    Destination={
        'ToAddresses': [
        "pedrorjbr@gmail.com",
        ]
    },

    Message={
        'Subject': {
        'Data': 'Entre em Contato com Nossa Central de Atendimento',
        'Charset': 'UTF-8'
        },
        'Body': {
            'Text': {
                'Data': body ,
                'Charset': 'UTF-8'
            }
        }
    }
)

1 个答案:

答案 0 :(得分:1)

您看到的内容("Olá, meu nome é Pedro")称为mojibake。创建它然后将一个编码中的文本解释为另一个(不兼容的)字符编码中的文本:

>>> print(u"Olá, meu nome é Pedro".encode('utf-8').decode('latin-1'))
Olá, meu nome é Pedro

要避免此类错误,请传递Unicode字符串,而不是字节(drop .encode('utf-8'))。如果.send_email()在此处不接受Unicode,则可能表示存在错误。