【问题标题】:Not all MIME text showed on mail server并非所有 MIME 文本都显示在邮件服务器上
【发布时间】:2014-06-21 06:40:22
【问题描述】:

我正在使用 Python email.mime lib 编写电子邮件,我创建了两个 MIMEText 对象,然后将它们作为文本(而不是附件)附加到 Message,结果我得到了 MIME 文档,如下所示可以看到有两个文本对象,一个是plain类型,另一个是html类型,我的问题是我在某些邮件客户端中只能看到后一个文本对象(这里是html),而我可以看到两个文本其他一些邮件客户端(例如 live.com)中的对象,那么是什么原因造成的呢?

Content-Type: multipart/mixed; boundary="===============0542266593=="
MIME-Version: 1.0
FROM: john.smith@NYU.com
TO: john.smith@live.com, john.smith@gmail.com
SUBJECT: =?utf-8?q?A_Greeting_From_Postman?=

--===============0542266593==
Content-Type: text/plain; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: base64

SGkhCkhvdyBhcmUgeW91PwpIZXJlIGlzIHRoZSBsaW5rIHlvdSB3YW50ZWQ6Cmh0dHA6Ly93d3cu
cHl0aG9uLm9yZw==

--===============0542266593==
Content-Type: text/html; charset="utf-8"
MIME-Version: 1.0
Content-Transfer-Encoding: base64

ICAgICAgICA8aHRtbD4KICAgICAgICAgIDxoZWFkPjwvaGVhZD4KICAgICAgICAgIDxib2R5Pgog
ICAgICAgICAgICA8cD5IaSE8YnI+CiAgICAgICAgICAgICAgIEhvdyBhcmUgeW91Pzxicj4KICAg
ICAgICAgICAgICAgSGVyZSBpcyB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5weXRob24ub3JnIj5s
aW5rPC9hPiB5b3Ugd2FudGVkLgogICAgICAgICAgICA8L3A+CiAgICAgICAgICA8L2JvZHk+CiAg
ICAgICAgPC9odG1sPgogICAgICAgIA==

--===============0542266593==--

【问题讨论】:

  • 您的结果不是格式良好的多部分 MIME 对象。特别是,电子邮件标题缺少“内容类型”。任何特定的邮件客户端如何解释这个不正确的输入似乎充其量是不可预测的。
  • @Robᵩ 抱歉,我在粘贴 MIME 文档时错过了第一行,实际上“Content-Type”在那里,现在我已将其添加到问题中。

标签: python email mime


【解决方案1】:

您已将“multipart/mixed”指定为 mime 类型。如果您只想显示一项,请指定“multipart/alternative”,如下所示:

email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.encoders import encode_base64

# Note: 'alternative' means only display one of the items. 
msg = MIMEMultipart('alternative')
msg['Subject'] = "Hello"
msg['From'] = 'me@example.com'
msg['To'] = 'you@example.com'

msg.attach(MIMEText('Hello!', 'plain'))
msg.attach(MIMEText('<b>Hello!</b>', 'html'))

# Not required, but you had it in your example, so I kept it.
for i in msg.get_payload():
    encode_base64(i)

print msg.as_string()

【讨论】:

  • 我的目标是显示两个项目,所以我使用了混合,但我的问题是在某些邮件客户端中,只显示最后一个项目,似乎与邮件服务器系统的功能有关,你怎么看?
  • 啊,我误解了你的意图。不,它不应该与邮件服务器有任何关系——它应该与邮件客户端有任何关系。
  • 那么,有没有一种方法可以在每个邮件客户端中显示多附加的 MIMEText 对象?从现在开始,对于某些邮件客户端,只显示最后一个 MIMEText 对象。虽然 RFC 2046 提到在某些情况下只能显示最后一个 MIMEText,但我想知道是否有一种方法可以显示所有项目,无论它是哪种客户端?
猜你喜欢
  • 1970-01-01
  • 2014-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-05
  • 1970-01-01
相关资源
最近更新 更多