Parsing weitergeleitete E-Mails

Ich schreibe etwas Code, um geöffnete E-Mails zu analysieren . Was bin ich mir nicht sicher, wenn es vielleicht eine Python-Bibliothek gibt, manche RFC konnte ich an eine andere Ressource halten, die mir erlauben würde, die Aufgabe zu automatisieren.

Um genau zu sein, weiß ich nicht, ob das "Layout" von weitergeleiteten E-Mails von einem Standard oder einer Empfehlung abgedeckt ist oder ob es sich gerade über die Jahre entwickelt hat, so dass jetzt die meisten E-Mail-Clients eine ähnliche Ausgabe für den Textteil erzeugen:

Begin forwarded message: > From: Me <me@me.me> > Date: January 30, 2010 18:26:33 PM GMT+02:00 > To: Other Me <other-me@me.me> > Subject: Unwise question 

– und wütend für Anhänge (und was auch immer andere MIME-Abschnitte dort sein können).

Wenn es noch nicht genau genug ist, werde ich es klären, es ist nur so, dass ich nicht 100% sicher bin, was zu fragen (RFC, Python lib, Convention oder etwas anderes).

4 Solutions collect form web for “Parsing weitergeleitete E-Mails”

In meiner Erfahrung ewig E-Mail-Client weiterleiten / antworten anders. In der Regel haben Sie eine einfache Textversion und eine html-codierte Version im Mime am unteren Rand des Mail Packs. Mail-Header haben einen RFC ( http://www.faqs.org/rfcs/rfc2822.html "2822" ), aber leider ist der Inhalt des Nachrichtentextes außerhalb des Geltungsbereichs.

Nicht nur müssen Sie mit der Mail-Client-Varianz zu kämpfen, sondern die Varianz der Benutzer-Einstellungen. Als Beispiel: Lotus Notes setzt Antworten an die Spitze und Thunderbird antwortet am unteren Rand. Wenn also ein Thunderbird-Benutzer auf eine Antwort des Lotus Notes-Nutzers antwortet, können sie ihre Antwort an die Spitze setzen und ihre Unterschrift am unteren Rand hinterlassen.

Ein weiterer Fall, der vielleicht mit der Wortverpackung der beantworteten Ketten konkurriert.

>>>> Die äußere Antwort, die über die Grenze geht und ist worthaft
Der Mail-Client des Mittleren Replierers \ n
>> Der Nachrichtenkörper einer mittleren Antwort
> Vorherige Antwort
Neueste Antwort

Ich würde die Nachricht nicht analysieren und es dem Benutzer überlassen, in ihren Köpfen zu analysieren. Oder ich würde den Code aus einem anderen Projekt ausleihen.

Im Gegensatz zu dem, was viele andere Leute sagten, gibt es einen Standard auf weitergeleiteten E-Mails, RFC 2046 , "Multipurpose Internet Mail Extensions (MIME) Teil 2: Medientypen", mehr als zehn Jahre alt. Siehe insbesondere den Abschnitt 5.2, "Message Media Type".

Die Grundidee hinter RFC 2046 ist es, eine Nachricht in den MIME-Teil eines anderen message/rfc822 , vom Typ namens (leider) message/rfc822 (niemals vergessen, dass MIME rekursiv ist). Die MIME-Bibliothek von Python kann es gut machen.

Ich habe die anderen Antworten nicht heruntergefahren, weil sie in einer Hinsicht richtig sind: Der Standard wird nicht von jedem Mailer gefolgt. Zum Beispiel kann der Mutt- Mailer eine Nachricht im RFC 2046-Format weiterleiten, aber auch im Adhoc-Format. Also, in der Praxis kann ein Mailer vermutlich nicht nur RFC 2046 verarbeiten, es muss auch die verschiedenen anderen und nicht spezifizierten Syntaxen analysieren.

Wie die anderen Antworten schon angeben, gibt es keinen Standard, und Ihr Programm wird nicht einwandfrei sein.

Sie könnten sich die Header anschauen, insbesondere den User-Agent Header, um zu sehen, welche Art von Client verwendet wurde, und Code speziell für die gängigsten Clients.

Um herauszufinden, welche Kunden Sie betrachten sollten, um zu unterstützen, werfen Sie einen Blick auf diese Popularität Studie . Verschiedene Outlooks, Yahoo !, Hotmail, Mail.app, iPhone Mail, Gmail und Lotus Notes Rang hoch. Etwa 11% der E-Mails werden als "nicht nachweisbar" eingestuft, aber mit Headern aus der weitergeleiteten E-Mail können Sie es besser machen. Beachten Sie, dass die Statistiken gesammelt wurden, indem Sie ein Bild in die E-Mail platzieren, so dass die Ergebnisse schief werden können.

Ein weiteres Problem ist HTML-Mail, die eine Nur-Text-Version enthalten kann oder nicht. Ich bin mir nicht sicher über das übliche Verhalten der Kunden in dieser Hinsicht.

Standard für eine Antwort / Vorwärts ist> Vorbereitung jeder Zeile die Anzahl der Zeiten, in denen die Mail verschachtelt ist, einschließlich, wer die anfängliche E-Mail gesendet hat, ist bis zu dem Client zu sortieren. Also, was Sie in Python tun müssen, fügen Sie einfach> zum Anfang jeder Zeile hinzu.

 imap Test <imap@gazler.com> Wrote: > >twice >imap Test wrote: >> nested >> >> imap@gazler.com wrote: >>> test >>> >>> -- >>> Message sent via AHEM. >>> >> > 

Anhänge müssen einfach nur an die Nachricht angehängt werden oder wie du es gehst.

Ich bin nicht vertraut mit Python, aber glaube, der Code wäre:

 string = string.replace("\n","\n>") 
Python ist die beste Programmiersprache der Welt.