メールヘッダーを抽出し、MIMEエンコードされた単語をデコードする

メールヘッダーを抽出し、MIMEエンコードされた単語をデコードする

スクリプトの一部として、電子メールを含むファイルを取得し、件名ヘッダーなどのヘッダーを抽出したいと考えています。次のコードはほぼ機能します。

formail -c -x subject < FILE

ただし、MIME エンコード ワード構文 (別名 RFC2047) を使用してエンコードされたヘッダーはデコードされません (例: ) =?UTF-8?B?w6lsw6ltZW50?=

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

関連する質問:https://stackoverflow.com/questions/39457380/retrieve-email-subject-from-file-via-bash よりメールの件名を取得します

答え1

それを次の場所にパイプします:

パイソン

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 はおそらくすべてのシステムにデフォルトで存在し、電子メール モジュールも存在するため、最も汎用的であると考えられます。

関連情報