提取邮件标头并解码 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 应该是最通用的,因为默认情况下它可能存在于所有系统中,甚至电子邮件模块也存在。

相关内容