
スクリプトの一部として、電子メールを含むファイルを取得し、件名ヘッダーなどのヘッダーを抽出したいと考えています。次のコードはほぼ機能します。
formail -c -x subject < FILE
ただし、MIME エンコード ワード構文 (別名 RFC2047) を使用してエンコードされたヘッダーはデコードされません (例: ) =?UTF-8?B?w6lsw6ltZW50?=
。
MIME でエンコードされた単語部分のデコードを処理しながら電子メール ヘッダーを抽出する優れた方法は何ですか?
答え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 はおそらくすべてのシステムにデフォルトで存在し、電子メール モジュールも存在するため、最も汎用的であると考えられます。