Wie kann ich den HTML-Code von einer E-Mail mit Linux abrufen?

498
William Tang

Ich verwende eine Linux-Maschine (Debian) und installierte fetchmail und procmail darauf. Momentan kann er jede Minute E-Mails abrufen, die an meine Google Mail-Adresse gesendet werden. Bei der von fetchmail abgerufenen Datei handelt es sich jedoch nicht um eine reguläre HTML-Datei, sondern um in Druck gesetzte Zeichen.

Mein Ziel ist es, den HTML-Quellcode der E-Mail zu erhalten, genau wie ich es tun könnte, wenn ich Outlook unter Windows öffne. Klicken Sie mit der rechten Maustaste auf die E-Mail und wählen Sie "Quellcode anzeigen".

Es ist auch wichtig, dass Sie dies programmgesteuert ausführen können, da ich die Aufgabe automatisieren möchte.

Bearbeiten: Meine erste Frage ist nicht genau genug, daher finden Sie hier weitere Informationen zu meinem Problem. Einer meiner Kunden sendet mir täglich eine E-Mail mit einer Tabelle mit den Verkaufsdaten des vorherigen Geschäftstages. Jeden Tag muss ich die Daten aus der E-Mail in eine EXCEL-Datei einfügen. Da dies jedoch eine sehr wiederkehrende Aufgabe ist, möchte ich eine Lösung haben, die das automatisch für mich erledigt. Ich weiß, wie man mit Python Daten in eine EXCEL-Datei schreibt, und ich habe eine Idee, wie man mit einigen Python-Bibliotheken Informationen aus einem HTML-Dokument abruft.

Also entschied ich mich für Crontab mit Linux, fetchmail und procmail, um Folgendes zu tun: Ich prüfe jede Minute, ob ich eine E-Mail von meinem Kunden erhalten habe. In diesem Fall führe ich ein Python-Skript für diese Datei aus, um die Informationen abzurufen. Danach gebe ich diese Informationen in eine EXCEL-Datei ein und schicke sie mir.

Das Skript funktioniert auf meinem PC gut mit dem HTML-Quellcode der E-Mail, die ich aus Outlook erhalten habe. Auf meinem Linux-Computer funktioniert es jedoch nicht. Ich öffnete den Quellcode der E-Mail-Datei von meinem Linux-Rechner aus und stellte fest, dass ein Teil des HTML-Codes geändert wurde.

0
Wenn gmail etwas nicht lustig macht, sollte die Datei, die Sie über `fetchmail` erhalten haben, ein mehrteiliges MIME-Mail-Format haben (dh, dass es" in Anführungszeichen-druckbare Zeichen "enthält, ist nicht der Punkt). Viele E-Mail-Clients senden E-Mails sowohl in Text- als auch in HTML-Form als unterschiedliche MIME-Teile. Es kann jedoch nicht garantiert werden, dass an Sie adressierte E-Mails überhaupt HTML enthalten (es sei denn, Google Mail fügt es hinzu, wenn es fehlt). Sie können "metamail" verwenden, um die verschiedenen Teile einschließlich des HTML-Codes zu extrahieren. dirkt vor 5 Jahren 1
Der Outlook-Befehl "Quellcode anzeigen" führt einige sehr dumme Dinge aus. du willst das nicht wirklich. tripleee vor 5 Jahren 0

2 Antworten auf die Frage

0
tripleee

Sie scheinen hier einige ungültige Annahmen zu haben. E-Mails haben nicht notwendigerweise einen einzelnen Körperteil und sind möglicherweise nicht in HTML enthalten.

Ohne weitere Informationen darüber, was Sie wirklich wollen, ist dies sehr spekulativ. aber so etwas

:0B: * Content-type: text/html * Content-transfer-encoding: quoted-printable | quoted-printable --decode >>extracted.html 

wird QP decodieren und an eine wachsende Datei mit HTML-Payloads anhängen (vorausgesetzt, Sie haben einen Befehl quoted-printablemit der Option --decode, QP zu decodieren).

Dies ist wahrscheinlich als solches nicht sinnvoll, da sich die meisten HTML-Nutzdaten in MIME-Multipart-Containern befinden. Das Obige geht davon aus, dass die Nachricht eine einzige Top-Level-Nutzlast hat, die text/htmlmit quoted-printable codiert und verschlüsselt ist. Wenn dies nicht der Fall ist, wird No-Op einfach nicht verwendet.

Procmail eignet sich nicht besonders gut zum Durchqueren von MIME-Strukturen, aber etwas ähnliches sollte mit Python und der Standardbibliothek leicht zu schreiben sein email. Es gibt auch eigenständige Tools, mit ripmimedenen Sie ausgewählte Payloads aus einer MIME-Nachricht extrahieren können.

0
William Tang

Vielen Dank an alle für Ihre Antworten.

Obwohl ich meine eigene Lösung gefunden habe, denke ich, dass ich in Zukunft einige der von Ihnen erwähnten Lösungen in Betracht ziehen sollte.

Ich fand endlich eine Lösung für das, wonach ich suchte. Das Problem, das ich hatte, war, als ich die mit fetchmail abgerufene E-Mail-Datei öffne. Sie enthält viele Sonderzeichen, die hinzugefügt wurden. Also sah es auf dem Browser nicht gut aus und hatte "=" - Zeichen an Stellen, an denen es nicht sein sollte.

Um dieses Problem zu lösen, habe ich gesehen, dass ich beim Öffnen der Datei mit Python am Ende jeder Zeile die Zeichen "=" und \ n "habe. Wenn ich also jedes der" = "und" \ n "entferne "Am Ende der Zeilen sah die Datei gut aus, als ich sie erneut mit einem Webbrowser öffnete.

Python verfügt über eine integrierte Funktion zum Dekodieren von Anführungszeichen. Zusätzlich zu der von Ihnen erwähnten Zeilenfaltung müssen Sie auch Sequenzen wie "= 3D" in jeder Zeile decodieren. tripleee vor 5 Jahren 0