Mail-Header extrahieren und MIME-codiertes Wort dekodieren

Mail-Header extrahieren und MIME-codiertes Wort dekodieren

Als Teil eines Skripts möchte ich eine Datei mit einer E-Mail nehmen und einen Header extrahieren, z. B. den Betreff. Folgendes funktioniert fast:

formail -c -x subject < FILE

Es dekodiert jedoch keine Header, die mit der MIME-Syntax für codierte Wörter (auch bekannt als RFC2047) kodiert sind, z. B. =?UTF-8?B?w6lsw6ltZW50?=.

Was ist eine gute Möglichkeit, einen E-Mail-Header zu extrahieren und gleichzeitig die Dekodierung von MIME-codierten Wortteilen zu berücksichtigen?

Verwandte Frage:https://stackoverflow.com/questions/39457380/retrieve-email-subject-from-file-via-bash

Antwort1

Leiten Sie es weiter an:

Python)

formail -c -x Subject < FILE | \
python -c "from email.header import decode_header;
import sys;
text, encoding = decode_header(sys.stdin.read())[0];
print text.decode(encoding)"

php)

formail -c -x Subject < FILE | \
  php -r 'echo iconv_mime_decode(stream_get_contents(STDIN),1,"utf-8");'

oder wenn Sie sicher sind, dass die Kopfzeile so aussehen wird =?UTF-8?B?…, können Sie ganz einfach Folgendes tun:

formail -c -x Subject < FILE | \
  awk -F '[?]' '{print $4}' | \
  openssl enc -base64 -d -A

Python dürfte wohl am universellsten sein, da es vermutlich in allen Systemen standardmäßig vorhanden ist und sogar das E-Mail-Modul vorhanden ist.

verwandte Informationen