Python:使用SMTP发送邮件(到Gmail)并且无法正确编码标头

时间:2018-02-23 11:15:47

标签: python email character-encoding smtp gmail

我有一段代码片段,部分来自stackoverflow用户:

#!/usr/bin/env python
# -*- coding: iso-8859-2 -*-

def send_email(user, pwd, recipient, subject, body):
    import smtplib
    FROM = user
    TO = recipient if type(recipient) is list else [recipient]
    SUBJECT = subject
    TEXT = body
    # Prepare actual message
    message = """From: %s\nTo: %s\nSubject: =?iso-8859-2?Q?%s?=\n\n%s
    """ % (FROM, ", ".join(TO), SUBJECT, TEXT)
    print(message)
    try:
        server = smtplib.SMTP("smtp.gmail.com", 587)
        server.ehlo()
        server.starttls()
        server.login(user, pwd)
        server.sendmail(FROM, TO, message)
        server.close()
        print('successfully sent the mail')
    except:
        print("failed to send mail")

sentence='Koń'
send_email('login','pass','recipient@gmail.com',sentence.encode('iso-8859-2'),'test')

它从gmail帐户向另一个Gmail帐户发送电子邮件,但是当我登录gmail页面时,主题显示为

 b'Ko\xf1'

我做错了什么?

1 个答案:

答案 0 :(得分:0)

推荐的解决方案:使用email.header中的Header功能

说明: RFC-2047期望在=?iso-8859-2?Q?...?=内引用可打印的编码字符串。
你把" raw"字符串。
koń 的有效utf-8编码编码为Subject: =?UTF-8?Q?ko=C5=84?=

建议:如果可以,请考虑使用utf-8代替iso-8859-2 utf-8更为通用(区域性较小),资源成本(例如磁盘空间)几乎不是额外的,而且几乎是ascii"语言。