如何在Python中从非多部分电子邮件创建多部分电子邮件?

2024-05-16 18:09:30 发布

您现在位置:Python中文网/ 问答频道 /正文

看来应该有更好的办法。我有一封纯文本邮件,我想把它转换成多部分邮件。我可以这样做:

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中有没有一种方法可以从我的原始邮件创建一个多部分的电子邮件?还是我做得对?你知道吗


Tags: keyfromimportnewgetemailhtml邮件
1条回答
网友
1楼 · 发布于 2024-05-16 18:09:30

如果您的输入是一个单一部分的电子邮件消息,那么是的,解析它并提取有效负载可能是一种方法。你知道吗

让解析器动态地将消息“转换”为多部分似乎是不可行的,或者定义得特别好。高兴的是,输入是简单的。你知道吗

新消息的外部容器可能应该是显式的multipart/alternative;默认类型multipart/mixed不传递您似乎正在努力寻找的同一消息的变体编码的语义。你知道吗

注意,email库在python3.5中被正式检修过。您可能希望探索将代码转换为使用较新的EmailMessage类层次结构,尽管我不认为这会为这个特定用例带来任何直接的好处。总的来说,新的代码库比旧的有点特别的遗留email库(现在称为compat32,如在python3.2中一样;在python3.3中已经非正式地引入了大修)更加通用和规范。你知道吗

相关问题 更多 >