当前位置: 首页 > 面试题库 >

Python电子邮件模块:带有某些Unicode名称+电子邮件的表单标头“发件人”

南门英飙
2023-03-14
问题内容

我正在借助Python电子邮件模块生成电子邮件。
以下几行代码演示了我的问题:

msg = email.MIMEMultipart.MIMEMultipart('alternative')

msg['From'] = "somemail@somedomain.com"

msg.as_string()

Out[7]: 'Content-Type: multipart/alternative;\n boundary="===============9006870443159801881=="\nMIME-Version: 1.0\nFrom: somemail@somedomain.com\n\n--===============9006870443159801881==\n\n--===============9006870443159801881==--'

如您所见,这里一切正常,“发件人”字段包含电子邮件ant,这很酷。但是,如果我想在电子邮件之前添加一些姓名怎么办?特别是unicode之一:

In [8]: u.get_full_name()
Out[8]: u'\u0414\u0438\u043c\u0430 \u0426\u0443\u043a\u0430\u043d\u043e\u0432'

In [9]: msg = email.MIMEMultipart.MIMEMultipart('alternative')

In [10]: msg['From'] = "%s <%s>" % (u.get_full_name(), "email@at.com")

In [11]: msg.as_string()
Out[11]: 'Content-Type: multipart/alternative;\n boundary="===============5792069034892928634=="\nMIME-Version: 1.0\nFrom: =?utf-8?b?0JTQuNC80LAg0KbRg9C60LDQvdC+0LIgPGVtYWlsQGF0LmNvbT4=?=\n\n--===============5792069034892928634==\n\n--===============5792069034892928634==--'

在这里,您可以看到所有字符串(名称,电子邮件)都已在base64中进行了编码(这是很合逻辑的,MIMEMultipart将如何知道该字符串包含unicode和非unicode部分)。
因此,我的问题是:我该如何告诉电子邮件模块以使我的“发件人”标题更漂亮,例如:
From: =?UTF-8?B?0JLQmtC+0L3RgtCw0LrRgtC1?= <admin@notify.vk.com> ?

另外,我还学到了一些RFC2822(http://www.faqs.org/rfcs/rfc2822.html,p.3.6.2)。它说:

发起方字段指示消息源的邮箱。“发件人:”字段指定邮件的作者,即负责编写邮件的人员或系统的邮箱。“发件人:”字段指定负责实际传输消息的代理的邮箱。例如,如果某个秘书要向其他人发送消息,则该秘书的邮箱将出现在“发件人:”字段中,而实际作者的邮箱将出现在“发件人:”字段中。如果消息的始发者可以由单个邮箱指示,并且作者和发送者相同,则不应使用“发件人:”字段。否则,两个字段都应该出现。

这是否意味着我应该合并这两个标头?(发件人和发件人)。我有些困惑,因为我注意到我的gmail中有很多电子邮件(通过“显示原始邮件”查看),其中显示了“发件人”字段名称和电子邮件。

感谢帮助。


问题答案:

您需要使用分别对名称部分进行编码email.header.Header

from email.MIMEMultipart import MIMEMultipart
from email.header import Header
from email.utils import formataddr

author = formataddr((str(Header(u'Alał', 'utf-8')), "somemail@somedomain.com"))
msg = MIMEMultipart('alternative')
msg['From'] = author
print msg

我希望这将有所帮助。



 类似资料:
  • 问题内容: 现在,我已经建立了一个PHP电子邮件表单,并且一切正常。但是,在测试时,我只得到了发件人的电子邮件地址作为名称。我想要的是发件人的姓名,例如: 约翰·杜 科目科目科目 代替: j.doe@website.com 科目科目科目 下面是代码… 有谁可以帮助我吗?谢谢。 PHP: 问题答案: 在您的4行说完之后添加一行:

  • 问题内容: 我正在使用sendgrid发送电子邮件,并且使用以下代码可以正常工作,但没有附件。 但是我需要发送附件,因此我搜索了github源和Web文档API,由于某种原因,没有javadocs,但是有一个示例GitHub sendgrid, 所以我一直在尝试直到它起作用为止,我缩小了一些异常和响应代码,起初我是被禁止的未经授权,最好是响应202,表示有效且已排队(在此处检查),这是我的代码发送

  • 问题内容: 问题答案: $config = Array( ‘protocol’ => ‘smtp’, ‘smtp_host’ => 'ssl://smtp.googlemail.com’, ‘smtp_port’ => 465, ‘smtp_user’ => ‘xxx’, ‘smtp_pass’ => ‘xxx’, ‘mailtype’ => ‘html’, ‘charset’ => ‘iso-8

  • 我成功地使用OAuth授权码授权流通过DocuSign进行身份验证并发送信封。签名人收件人收到电子邮件通知时,会多次引用DocuSign帐户的名称/电子邮件地址,例如,发件人显示为: 电子邮件正文中包括弗雷德·史密斯及其电子邮件地址fred@acme.com 。我们希望能够在创建信封时动态/以编程方式更改发送的电子邮件通知中的这些引用。 到目前为止,我还没有在API文档中看到这方面的任何选项-这是

  • 查看以下,详细了解如何处理与 iPhone 手机配对的 M600 上的电子邮件。 阅读您的 M600 上的电子邮件 如果您在手机上使用电子邮件通知,那么在您收到新邮件时会在您的 M600 看到通知。 阅读电子邮件 轻触通知。 利用您的 M600 回复电子邮件 您可以利用您的手腕表回复邮件。 回复电子邮件 轻触通知查看所有邮件 从屏幕底部向上滑动,查看您可以执行的操作。 轻触 Reply(回复),并

  • Email的历史比Web还要久远,直到现在,Email也是互联网上应用非常广泛的服务。 几乎所有的编程语言都支持发送和接收电子邮件,但是,先等等,在我们开始编写代码之前,有必要搞清楚电子邮件是如何在互联网上运作的。 我们来看看传统邮件是如何运作的。假设你现在在北京,要给一个香港的朋友发一封信,怎么做呢? 首先你得写好信,装进信封,写上地址,贴上邮票,然后就近找个邮局,把信仍进去。 信件会从就近的小