Die ursprüngliche MIME-Baumstruktur der eingehenden Nachricht ist wie folgt (unter Verwendung von email.iterators._structure(msg)
):
multipart/mixed
text/html (message)
application/octet-stream (attachment 1)
application/octet-stream (attachment 2)
via GMail Ergebnisse in der folgenden Struktur Antwort auf:
multipart/alternative
text/plain
text/html
D.h. Sie sind nicht so schlau wie ich dachte, sondern einfach die Anhänge verwerfen (gut) und Text- und HTML-Versionen zur Verfügung stellen, die den "zitierten Inhalt" explizit umstrukturieren.
Ich fange an zu denken, dass das alles ist, was ich auch tun sollte, antworten Sie einfach mit einer einfachen Nachricht, da nach dem Verwerfen der Anhänge es nicht viel Sinn macht, die ursprüngliche Nachricht zu behalten.
Noch, könnte auch meine ursprüngliche Frage beantworten, da ich sowieso jetzt herausgefunden habe, wie man es macht.
Zuerst ersetzen alle Anhänge in der ursprünglichen Nachricht mit text/plain Platzhalter:
import email
original = email.message_from_string(...)
for part in original.walk():
if (part.get('Content-Disposition')
and part.get('Content-Disposition').startswith("attachment")):
part.set_type("text/plain")
part.set_payload("Attachment removed: %s (%s, %d bytes)"
%(part.get_filename(),
part.get_content_type(),
len(part.get_payload(decode=True))))
del part["Content-Disposition"]
del part["Content-Transfer-Encoding"]
Dann eine Antwortnachricht erstellen:
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.message import MIMEMessage
new = MIMEMultipart("mixed")
body = MIMEMultipart("alternative")
body.attach(MIMEText("reply body text", "plain"))
body.attach(MIMEText("<html>reply body text</html>", "html"))
new.attach(body)
new["Message-ID"] = email.utils.make_msgid()
new["In-Reply-To"] = original["Message-ID"]
new["References"] = original["Message-ID"]
new["Subject"] = "Re: "+original["Subject"]
new["To"] = original["Reply-To"] or original["From"]
new["From"] = "[email protected]"
dann die ursprüngliche MIME-Nachricht Objekt anhängen und senden:
new.attach(MIMEMessage(original))
s = smtplib.SMTP()
s.sendmail("[email protected]", [new["To"]], new.as_string())
s.quit()
Die resultierende Struktur ist:
multipart/mixed
multipart/alternative
text/plain
text/html
message/rfc822
multipart/mixed
text/html
text/plain
text/plain
Oder es ist etwas einfacher Verwendung Django:
from django.core.mail import EmailMultiAlternatives
from email.mime.message import MIMEMessage
new = EmailMultiAlternatives("Re: "+original["Subject"],
"reply body text",
"[email protected]", # from
[original["Reply-To"] or original["From"]], # to
headers = {'Reply-To': "[email protected]",
"In-Reply-To": original["Message-ID"],
"References": original["Message-ID"]})
new.attach_alternative("<html>reply body text</html>", "text/html")
new.attach(MIMEMessage(original)) # attach original message
new.send()
Die Folge Enden (in GMail mindestens) die ursprüngliche Nachricht als zeigt "---- ---- Weitergeleitete-Nachricht", die ‚isn Ich bin ganz klar, was ich suchte, aber die allgemeine Idee funktioniert und ich hoffe, diese Antwort hilft jemandem, herauszufinden, wie man mit MIME-Nachrichten herumhantiert.
"Ich hoffe, diese Antwort hilft jemandem, herauszufinden, wie man mit MIME-Nachrichten herumhantiert." ----- Das hat es wirklich getan. Danke Tom! – aniketd