我正在尝试使用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。
更新了代码片段以包含真实数据,例如我使用的邮件服务器。
我尝试使用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。