我可以解析保存为文本文件并使用perl检索/保存其附件的电子邮件吗?
-
29-09-2019 - |
题
我正在使用perl& 邮件:: imapclient 保存Gmail的电子邮件 .txt
使用IMAPCLIENT方法的文件:
message_to_file
这些文件似乎包含编码为文本的电子邮件的附件。
这是一些文本文件:
--0015174c1274ee7ca60495ca69d5
Content-Type: video/3gpp; name="20101112233055.3gp"
Content-Disposition: attachment; filename="20101112233055.3gp"
Content-Transfer-Encoding: base64
X-Attachment-Id: 1353288501407252480-1
AAAAHGZ0eXAzZ3A0AAADADNncDRtcDQxM2dwNgAFHyltZGF0AAABthAwrMK9/Mue7fM+95wsf9P8
WI7mPzzp/ikijbucv72j7OywVGuh5kBzo89Zra6PihxZg0zadDqihZFpsPJeG36Ihk9qZW+LLQ2u
NEd96vsqgpnLFnhhwGBWgL2Xpt0cXkW....[A LOT MORE CHARS]....AAAQAAAALAAAAAQAAABRzdHN6
AAAAAAAAACAAAAChAAAAIHN0Y28AAAAAAAAABAABHNoAASMaAALYFwAFHeU=
--0015174c1274ee7ca60495ca69d5--
我找不到任何可以单独保存附件的方法。有什么方法可以通过解析做到这一点?
解决方案
您到达的是MIME编码的电子邮件的原始文本。大多数语言都有用于解析这些库的通用MIME库。对CPAN的快速搜索显示Mime ::解析器 可能会做到这一点:
use MIME::Parser;
open(FH, '/var/tmp/test.txt');
my $parser = new MIME::Parser;
my $entity = $parser->parse(\*FH) or die;
$entity->dump_skeleton;
这将转储存储在纯文本文件test.txt中的电子邮件的各个部分到 /var /tmp。查看Mime :: Parser Docs以获取更多选项。
其他提示
这是解决方法的建议。在过去的标题之后,您将参与此逻辑。
use MIME::Base64;
my $attachlines = '';
while ( <$input> ) {
last if index( $_, '--0015174c1274ee7ca60495ca69d5--' ) == 0;
$attachlines .= $_;
}
my $attach = MIME::Base64::decode( $attachlines );
笔记: :我认为您知道Mime多部分表格如何工作,所以我不讨论如何编程分隔线 '--0015174c1274ee7ca60495ca69d5--'
.
不隶属于 StackOverflow