我正在使用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--'.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top