作为脚本的一部分,我想获取包含电子邮件的文件并提取标题,例如主题标题。以下几乎有效:
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 应该是最通用的,因为默认情况下它可能存在于所有系统中,甚至电子邮件模块也存在。