擷取郵件標頭並解碼 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

透過管道將其傳輸到:

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 應該是最通用的,因為預設情況下它可能存在於所有系統中,甚至電子郵件模組也存在。

相關內容