Как мне создать составное письмо из не составного письма в Python? - PullRequest
0 голосов
/ 04 декабря 2018

Кажется, должен быть лучший способ сделать это.У меня есть текстовое электронное письмо, и я хотел бы преобразовать его в составное электронное письмо.Я могу сделать это так:

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 способ просто создать составное письмо из моего исходного сообщения?Или я делаю это правильно?

1 Ответ

0 голосов
/ 05 декабря 2018

Если ваш ввод представляет собой одночастное сообщение электронной почты, то да, его анализ и извлечение полезных данных, вероятно, является подходящим способом.

Наличие парсера, "преобразующего" сообщение в multipart на лету, не 'кажется возможным или особенно четко определенным.Будьте рады, что ввод прост.

Внешний контейнер для вашего нового сообщения, вероятно, должен быть явно multipart/alternative;тип по умолчанию multipart/mixed не передает семантику вариантов кодирования того же сообщения, к которому вы стремитесь.

Обратите внимание, что библиотека email была официально пересмотрена в Python 3.5.Возможно, вы захотите изучить переход вашего кода на использование более новой иерархии классов EmailMessage, хотя я не думаю, что это принесет какие-либо немедленные выгоды для этого конкретного варианта использования.В целом, новая кодовая база более универсальна и дисциплинирована, чем старая специальная устаревшая библиотека email (теперь известная как compat32, как в Python 3.2; капитальный ремонт был неофициально введен уже в Python 3.3).

...