【发布时间】:2012-05-20 02:01:06
【问题描述】:
我在 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==--'
如您所见,这里一切正常,发件人字段包含电子邮件蚂蚁,这很酷。但是如果我想在电子邮件之前添加一些名字怎么办?尤其是 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)。它告诉我们:
originator 字段表示来源的邮箱 信息。 “发件人:”字段指定邮件的作者, 即负责人或系统的邮箱 用于编写消息。 “发件人:”字段指定 负责实际传输的代理的邮箱 信息。例如,如果秘书要发送一条消息 另一个人,秘书的邮箱会出现在 “发件人:”字段和实际作者的邮箱将出现在 “发件人:”字段。如果可以指明消息的发起者 同一个邮箱,作者和发信人相同, 不应使用“发件人:”字段。否则,两个字段都应该 出现。
这是否意味着我应该合并这两个标题? (发件人和发件人)。我有点困惑,因为我注意到我的 gmail 中有很多电子邮件(通过“显示原始”查看),其中显示了来自字段名称和电子邮件。
感谢您的帮助。
【问题讨论】: