邮件模块编码错误

Encoding error with mailer module

当我在 python 2.7 中使用 the mailer module(通过 pip 安装在 Windows 上)时,如果我使用非 ascii 字符,我会遇到编码错误。

例如,使用以下代码段:

导入邮件程序

message = mailer.Message()
message.From = "me@example.com"
message.To = "shan-x@server.com"
message.Subject = "Test"
message.Body = "Stuff with special characters like à or ç"

mailer = mailer.Mailer('my_relay-smtp')
mailer.send(message)

然后我收到以下邮件:

Stuff with special characters like ?? or ??

我试过这个:

message.Body = "Stuff with special characters like à or ç".decode('utf-8')

(或 encode)。但后来我得到一个错误:

UnicodeEncodeError: 'ascii' codec can't encode character u'\xe0' in position 35: ordinal not in range(128)

答案在 class 消息的帮助字符串中很明确:

Use the charset property to send messages using other than us-ascii

所以你应该使用:

message = mailer.Message(charset='utf8')
message.From = "me@example.com"
message.To = "shan-x@server.com"
message.Subject = "Test"
message.Body = "Stuff with special characters like à or ç".decode('utf-8')

mailer = mailer.Mailer('my_relay-smtp')
mailer.send(message)