Wie kann ich Metamail verwenden, um E-Mail-Anhänge ohne interaktive Eingabe zu extrahieren?

1164
george

Ich suche nach einer Möglichkeit, alle Anhänge aus einem IMAP-Ordner mit 3000 DMARC-Berichten zu speichern, von denen jeder in den einzelnen Nachrichten als .zipoder als .xml.gzDatei angehängt ist . Ich bin mit Claws Mail, die hat einen Weg, dies zu automatisieren (siehe Beispiele -> Speicher) durch munpack. Leider gibt es auf openSUSE Leap 42.3 (das ich benutze) kein Paket, das es bietet munpack. Nach einiger Websuche fand ich eine Alternative: metamail -wyals Antwort auf diese Frage vorgeschlagen .

Das direkt in Krallen zu versuchen, gab mir einen Fehler (da das Programm nicht richtig verwendet wurde). Also habe ich manuell eine Nachricht in einem temporären Verzeichnis gespeichert und von der Konsole aus versucht:

[/tmp/download]: metamail -yw msg Date: Mon, 03 Nov 2014 10:13:53 +0000 Subject: Report domain: ████████ Submitter: ████████ From: noreply-dmarc-support@google.com To: ████████   This message contains data in an unrecognized format, application/zip, which can either be viewed as text or written to a file.  What do you want to do with the application/zip data? 1 -- See it as text 2 -- Write it to a file 3 -- Just skip it  2 Please enter the name of a file to which the data should be written (Default: ████████.zip) > Wrote file ████████.zip 

Mit anderen Worten: Es funktioniert per se, erfordert aber interaktive Eingaben für jede einzelne Nachricht - bei 3000+ Mails sicherlich keine Option.

Meine Frage ist:

Wie kann ich metamailauf eine Art und Weise verwenden, die keine interaktive Eingabe erfordert, sodass sie wiederholt werden kann (z. B. in einem Skript oder durch die Funktionalität von Claws Mail)?

1

1 Antwort auf die Frage

1
dirkt

Ich bin mir nicht sicher, wie die Daten aussehen, die Sie tatsächlich haben. Das Beste, was ich tun kann, ist eine fundierte Vermutung.

metamail -q -w -x file_nameIn Skripten habe ich in der Vergangenheit erfolgreich Anhänge extrahiert. Wie Sie sehen können man metamail, -wweist metamail an, die mailcap-Datei nicht abzurufen, sondern die Anhänge einfach zu extrahieren, zu sagen, -qdass sie leise ist, weil Skripte die zusätzliche Ausgabe nicht mögen, und -xsagt, dass sie definitiv nicht auf einem Terminal ausgeführt wird es sollte keine dummen Fragen stellen.

Sie haben es bereits -w, und Sie verwenden es auch -y, was nicht nötig sein sollte, wenn die Mail richtig formatiert ist, aber vielleicht nicht Ihre - wie gesagt, ich weiß nicht, welche Daten Sie haben. Die Manpage warnt auch vor ungewöhnlichen Effekten, die mit auftreten können -y.

Also erst mal schauen -y, ob es noch funktioniert. Dann fügen -xSie hinzu, ob es aufhört zu fragen. Fügen Sie schließlich hinzu -q, um unerwünschte Ausgaben zu entfernen.

Bearbeiten

Nachdem ich beschuldigt wurde, zu faul zu sein, um es zu versuchen, habe ich die folgenden Schritte ausgeführt:

1) Ich habe eine ZIP-Datei mit einer leeren Datei per E-Mail verschickt mutt. Hier ist die komplette Mail, bei der einige Header entfernt / bearbeitet wurden:

From mail Sat Mar 3 12:49:13 2018 Envelope-to: <dirk@...> ... Message-ID: <20180303114913.xr7xvpx2pso6wurn@feanor> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="gsrhzrdopn4ddt7t" Content-Disposition: inline User-Agent: NeoMutt/20170609 (1.8.3) Content-Length: 480 Lines: 18   --gsrhzrdopn4ddt7t Content-Type: text/plain; charset=us-ascii Content-Disposition: inline  Test  --gsrhzrdopn4ddt7t Content-Type: application/zip Content-Disposition: attachment; filename="foo.zip" Content-Transfer-Encoding: base64  UEsDBAoAAAAAALplY0wAAAAAAAAAAAAAAAAHABwAenp6L2Zvb1VUCQAD8IqaWvCKmlp1eAsA AQToAwAABOgDAABQSwECHgMKAAAAAAC6ZWNMAAAAAAAAAAAAAAAABwAYAAAAAAAAAAAApIEA AAAAenp6L2Zvb1VUBQAD8IqaWnV4CwABBOgDAAAE6AMAAFBLBQYAAAAAAQABAE0AAABBAAAA AAA=  --gsrhzrdopn4ddt7t-- 

2) Speichern Sie es in einer Mailbox mit dem Namen " yyyRun"

METAMAIL_TMPDIR=. metamail -q -x -w ~/Mail/yyy 

3) Wie erwartet, fragt Metamail nicht und speichert alle Teile als zwei Dateien mit dem Namen 1-M64bZlzund 1-MKfamEn. Die zweite ist die zip-Datei, die erste ist der Haupttext.

Und nun? Es funktioniert für mich, es funktioniert nicht für Sie.

Danke für die schnelle Antwort. Ich habe versucht, was Sie vorschlagen, aber es gibt mir (ich hoffe, dass dies richtig formatiert wird): `[/ tmp / download]: metamail -w -x -q msg Diese Nachricht enthält Daten im 'application / zip'-Format. welches dekodiert und in die Datei "/tmp/████.zip" geschrieben wird. Wenn Sie diese Daten nicht wünschen, sollten Sie diese Datei wahrscheinlich löschen. Schrieb Datei / tmp / ████.zip`. IOW: Es ist nicht wirklich ruhig und gibt die Datei immer in `/ tmp` aus. Wissen Sie, wie ich es anweisen könnte, die Dateien in einem bestimmten Verzeichnis zu speichern und hoffentlich leise zu machen, damit ich Ihre Antwort als vollständig markieren kann? george vor 6 Jahren 0
Die Eingabedatei "msg" ist einfach die E-Mail-Nachrichtenquelle. george vor 6 Jahren 0
Können Sie eine der kleineren Dateien mit diesem Problem auswählen, sie irgendwo hochladen und Ihre Frage mit einem Link bearbeiten, damit ich einen Blick darauf werfen kann, vorausgesetzt, sie enthält keine vertraulichen Daten. dirkt vor 6 Jahren 0
Sie können eine Beispieldatei erstellen, indem Sie sich eine E-Mail-Nachricht mit einem Anhang (z. B. zip) senden und dann in Ihrem E-Mail-Client für die empfangene Nachricht "Quelltext anzeigen" auswählen. Ich glaube, ich habe den richtigen Befehl gefunden: `export METAMAIL_TMPDIR = / tmp / download; metamail -w -x -q% F> / tmp / export.log` wobei '% F' der Name der Eingabedatei ist. Bei einigen * DMARC-Berichten wird jedoch auch eine separate Textdatei mit einem Namen ähnlich wie "mm.EcPvNM" erstellt, die manchmal 0 Byte beträgt und manchmal eine kurze Textnachricht enthält. Gibt es eine Möglichkeit, den Befehl zu optimieren, um nur die Anhänge zu extrahieren? george vor 6 Jahren 0
ETA: Wenn Sie möchten, bearbeiten Sie Ihre Antwort so, dass sie die vollständige Lösung enthält, damit wir sie für andere als "die Antwort" kennzeichnen können :) george vor 6 Jahren 0
Ich kann sicherlich eine Beispieldatei erstellen, indem ich mir eine E-Mail schicke, aber es funktioniert mit diesen Dateien, sodass ich das Problem mit * Ihrer Datei * auf diese Weise nicht herausfinden kann. :-) Und es extrahiert * alle * Mime-Parts, was manchmal Teile von Nullgröße bedeutet, wenn der Mailer, der es erstellt hat, versagt hat. Andere Mailer fügen gerne kurze Textnachrichten ein, was Sie wahrscheinlich sehen werden. Ein weiterer Grund, warum ich eine * Ihrer * Nachrichten sehen möchte. :-) dirkt vor 6 Jahren 0
Es tut mir leid, aber ich kann meine Nachrichten nicht öffentlich teilen. Dies sind interne Daten. Ich habe aber Schritte zur Reproduktion gegeben, da es genau das gleiche Prinzip ist. Hast du das probiert? Oder lehnen Sie es einfach ab, weil Sie es nicht getan haben? :) george vor 6 Jahren 0
Vielen Dank für das Testen. Das Letzte ist: Wie können wir diese Arbeit machen, ohne den Haupttext in einer separaten Datei zu speichern, dh - nur den Anhang zu extrahieren? Ist das möglich, bitte. (ETA: niemand wirft dir irgendetwas vor) george vor 6 Jahren 0
Du kannst nicht Es werden * alle * Mime-Parts extrahiert, und abhängig vom erstellenden Mailer können * viele * Mime-Parts vorhanden sein. Sie können die Ausgabe von "Metamail" mit "grep -B2 application / zip" oder ähnlichem analysieren, um den Namen aller * Mime-Parts mit diesem Inhaltstyp zu erhalten. Oder Sie können `file` verwenden, um den Typ der extrahierten Dateien zu bestimmen. Oder irgendetwas anderes, das für Sie funktioniert. dirkt vor 6 Jahren 1