メッセージヘッダーの抽出とMIMEエンコードされた単語のデコード

メッセージヘッダーの抽出とMIMEエンコードされた単語のデコード

スクリプトの一部として電子メールを含むファイルをインポートし、件名ヘッダーなどのヘッダーを抽出したいと思います。以下はほとんど機能します。

formail -c -x subject < FILE

ただし、MIMEエンコードされた単語構文(RFC2047とも呼ばれます)を使用してエンコードされたヘッダーはデコードされません=?UTF-8?B?w6lsw6ltZW50?=

MIMEエンコードされた単語の部分をデコードしながらEメールヘッダーを抽出する良い方法は何ですか?

関連質問:https://stackoverflow.com/questions/39457380/retrieve-email-subject-from-file-via-bash

答え1

次にパイプしてください。

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");'

または、ヘッダーが確実であれば、=?UTF-8?B?…次のことを簡単に実行できます。

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

Pythonはデフォルトですべてのシステムに存在し、電子メールモジュールも存在するため、最も一般的である必要があります。

関連情報