【发布时间】:2017-01-28 10:48:59
【问题描述】:
我正在尝试发送电子邮件,但邮件内容标题部分的发件人地址存在小问题。
基本上,这就是我想在标题中包含的内容:
From: "Real Name" <test@example.com>
这就是我所做的(Python 3.5):
message = email.mime.text.MIMEText(body)
message.add_header('From', from_hdr)
它对 ASCII 可以正常工作,但对 UTF-8 无效。
给定一个非 ASCII 名称,如 "Strángé Nämé" <test@example.com>,输入将由 add_header() 编码:
如果值包含非 ASCII 字符......它会自动 使用 utf-8 CHARSET 和 LANGUAGE 以 RFC 2231 格式编码 没有。
问题是整个字符串——不仅是真实姓名——都被编码了。结果看起来像一个字符串:=?utf-8?.....?=,原始格式丢失。邮件服务器将明显缺失的域添加到其中,并且损坏已完成。
然后发件人显示为(由收件人的电子邮件程序解码):
"\"Strángé Nämé\" <test@example.com>"@server.example.com
我尝试使用email.utils.parseaddr() 拆分地址,并使用email.utils.encode_rfc2231() 仅对真实姓名部分进行编码,但这没有帮助。
我暂时在 Form: 字段中避免使用 UTF-8,不知道如何正确处理它。你能帮忙吗?
【问题讨论】: