【问题标题】:How do I create a multipart email from a non-multipart email in Python?如何在 Python 中从非多部分电子邮件创建多部分电子邮件?
【发布时间】:2019-05-06 04:20:17
【问题描述】:

似乎应该有更好的方法来做到这一点。我有一封纯文本电子邮件,我想将其转换为多部分电子邮件。我可以这样做:

import commonmark

from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.parser import BytesParser

raw_msg = b'''
To: you@example.com
From: me@example.com
Subject: This is a sample

# This should be h1

Something

## This should be h2

Email from markdown? Sweet
'''.strip()


msg = BytesParser().parsebytes(raw_msg)
html = commonmark.commonmark(msg.get_payload())
new_msg = MIMEMultipart()
for key in msg.keys():
    new_msg[key] = msg.get(key)

new_msg.attach(MIMEText(msg.get_payload()))
new_msg.attach(MIMEText(html, 'html'))

print(str(new_msg))

这似乎可行,但对我来说似乎也很笨重。在 Python 中有没有一种方法可以从我的原始消息中创建多部分电子邮件?还是我做对了?

【问题讨论】:

    标签: python email email-attachments multipart


    【解决方案1】:

    如果您的输入是单部分的电子邮件,那么是的,解析它并提取有效负载可能是要走的路。

    让解析器动态地将消息“转换”为多部分似乎并不可行,或者说特别明确。很高兴输入很简单。

    您的新消息的外部容器可能应该是明确的multipart/alternative;默认类型 multipart/mixed 不传达您似乎正在努力争取的同一消息的变体编码的语义。

    请注意,email 库在 Python 3.5 中进行了正式大修。您可能想探索转换代码以改用较新的 EmailMessage 类层次结构,尽管我不相信它会为这个特定用例带来任何直接的好处。总体而言,新的代码库比旧的有点特别的旧 email 库(现在称为 compat32,如 Python 3.2;大修已在 Python 3.3 中非正式地引入)更加通用和规范。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-31
      • 2017-03-19
      • 2013-07-13
      • 2021-01-11
      • 2018-05-16
      • 2012-08-13
      • 1970-01-01
      相关资源
      最近更新 更多