如何使用MIMEText编码“发件人名称”

时间:2019-03-05 11:41:13

标签: python python-2.7 unicode encoding gmail

通过Gmail API发送时,发件人名称中是否可以包含特殊字符?

例如,当尝试使用以下代码发送时,发件人名称将被省略,并且仅显示电子邮件地址。

当包含基于ASCII的发件人名称时,它可以正常工作。

import base64
from email.mime.text import MIMEText

fromName = u'«ταБЬℓσ»' #contains special characters
fromEmail = 'name@domain.com'

message = MIMEText(bodyHtml, 'html', 'utf-8')
message['From'] = u'{} <{}>'.format(fromName, fromEmail).encode('utf-8')
message['to'] = unicode(toEmail)
message['reply-to'] = unicode(replyTo)
message['subject'] = unicode(subject)
message_obj = {'raw': base64.urlsafe_b64encode(message.as_string())}

1 个答案:

答案 0 :(得分:0)

对于像我这样的新手,这很难解决。我最初缺少的主要方面是,发件人姓名必须采用引用的可打印格式才能被识别。

RFC 2047文档和this question帮助我解决了问题。

希望这对以后的人有帮助。

import base64
import quopri
from email.mime.text import MIMEText

message = MIMEText(bodyHtml, 'html', 'utf-8')
message['From'] = "=?utf-8?q?" + quopri.encodestring(str(fromName.encode('utf-8'))) + "?=" + " <{}>".format(fromEmail)
message['to'] = unicode(toEmail)
message['reply-to'] = unicode(replyTo)
message['subject'] = unicode(subject)
message_obj = {'raw': base64.urlsafe_b64encode(message.as_string())}