使用Python3 smtplib发送邮件,该邮件的真实姓名包含“发件人”标头中的unicode字符

时间:2018-10-27 18:21:14

标签: python-3.x smtplib

我正在尝试使用smtplib向用户显示真实姓名的方式发送邮件(例如/ etc / passwd中的Gecos字段)。为此,我将Something <user@example.com>用作From:标头的值。

我正在尝试这样做:

to = 'test@wikimedia.cz'
from_mail = 'info@wikimedia.cz'
from_name = 'Sender Name'
mailtext = 'Příliš žluťoučký kůň úpěl ďábelské ódy'

s = smtplib.SMTP('smtp-relay.gmail.com')
s.ehlo()
s.starttls()
msg = MIMEText(mailtext, _charset="utf-8")
msg['Subject'] = '(bez předmětu)'
msg['From'] = '%s <%s>' % (from_name, from_mail)
msg['To'] = to
s.sendmail(from_mail, to, msg.as_string())
s.quit()

这可以正常工作,如您所见on a screenshot of my Gmail。但是,如果from_mail是“JménoOdesílatele”(包括非ASCII字符),则邮件a)重定向到垃圾邮件文件夹b)不会显示“JménoOdesílatele”作为发件人名称,请参阅screenshot

如您所见,邮件文本可以包含非ASCII字符,没有问题。同样,主题包含非ASCII字符也没有问题。但是无法包含非ASCII。

更新2018-11-10

更新了代码片段以包含真实数据,例如我使用的邮件服务器。

我尝试使用msg['From'] = Header('%s <%s>' % (from_name, from_mail), 'utf-8')msg['From'] = Header('%s <%s>' % (from_name, from_mail), 'utf-8').encode()a而不是msg['From'] = '%s <%s>' % (from_name, from_mail),结果是相同的。

如果有人感兴趣,我的真实代码是on GitHub

0 个答案:

没有答案