如何将 UTF-8“发件人:”地址添加到邮件消息中?

VPf*_*PfB 1 python email

我正在尝试发送电子邮件,但邮件内容标题部分的发件人地址有一个小问题。

基本上,这就是我想要在标题中包含的内容:

From: "Real Name" <test@example.com>
Run Code Online (Sandbox Code Playgroud)

这就是我所做的(Python 3.5):

message = email.mime.text.MIMEText(body)
message.add_header('From', from_hdr)
Run Code Online (Sandbox Code Playgroud)

它适用于 ASCII,但不适用于 UTF-8。

给定一个非 ASCII 名称,如"Strángé Nämé" <test@example.com>输入被编码为add_header()

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

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

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

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

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

Neh*_*ani 6

以下对我有用(在 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()
Run Code Online (Sandbox Code Playgroud)

诀窍是使用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
Run Code Online (Sandbox Code Playgroud)