【问题标题】:How to add an UTF-8 "From:" address to a mail mesage? [duplicate]如何将 UTF-8“发件人:”地址添加到邮件中? [复制]
【发布时间】: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é" &lt;test@example.com&gt;,输入将由 add_header() 编码:

如果值包含非 ASCII 字符......它会自动 使用 utf-8 CHARSET 和 LANGUAGE 以 RFC 2231 格式编码 没有。

问题是整个字符串——不仅是真实姓名——都被编码了。结果看起来像一个字符串:=?utf-8?.....?=,原始格式丢失。邮件服务器将明显缺失的域添加到其中,并且损坏已完成。

然后发件人显示为(由收件人的电子邮件程序解码): "\"Strángé Nämé\" &lt;test@example.com&gt;"@server.example.com

我尝试使用email.utils.parseaddr() 拆分地址,并使用email.utils.encode_rfc2231() 仅对真实姓名部分进行编码,但这没有帮助。

我暂时在 Form: 字段中避免使用 UTF-8,不知道如何正确处理它。你能帮忙吗?

【问题讨论】:

    标签: python email


    【解决方案1】:

    以下对我有用(在 python2 和 python3 中):

    # -*- coding: utf-8 -*-
    
    import smtplib
    from email.mime.text import MIMEText
    from email.header import Header
    
    msg = MIMEText("Hi! This is Mr. Robot!")
    
    you = 'nehalxxxxx@somedomain.com'
    me = Header('Strángé Nämé', 'utf-8')
    me.append('<test@example.com>', 'ascii')
    
    msg['Subject'] = 'Hi There'
    msg['From'] = me
    msg['To'] = you 
    
    s = smtplib.SMTP('localhost')
    s.sendmail(me.__str__(), [you], msg.as_string())
    s.quit()
    

    诀窍是使用Header 类和append() 方法

    然后消息看起来像这样 (msg.as_string()):

    Content-Type: text/plain; charset="us-ascii"
    MIME-Version: 1.0
    Content-Transfer-Encoding: 7bit
    Subject: Hi There
    From: =?utf-8?b?U3Ryw6FuZ8OpIE7DpG3DqQ==?= <test@example.com>
    To: nehalxxxxx@somedomain.com
    

    【讨论】:

    • 是的,这个技巧也对我有用。 Header 类文档说将字符串与不同的编码混合是可以的。只是想知道真实姓名和电子邮件地址之间的分隔空间来自哪里。无论如何,Form 字段现在可以了。谢谢。
    • 谢谢,我很惊讶这样的事情没有开箱即用,但这解决了我的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    • 2021-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-17
    相关资源
    最近更新 更多