1

我正在使用 Perl & MAIL::IMAPClient使用 IMAPClient 方法将来自 Gmail 的电子邮件保存为.txt文件:

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--

我找不到任何可以单独保存附件的方法。有没有办法通过解析来做到这一点?

4

2 回答 2

2

您所拥有的是 MIME 编码电子邮件的原始文本。大多数语言都有一个通用的 MIME 库来解析这些。在 CPAN 上的快速搜索显示 MIME::Parser可能会成功:

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 文档以获取更多选项。

于 2010-11-29T17:38:30.490 回答
1

这是解决方法的建议。通过标题后,您将使用此逻辑。

use MIME::Base64;

my $attachlines = '';
while ( <$input> ) { 
    last if index( $_, '--0015174c1274ee7ca60495ca69d5--' ) == 0;
    $attachlines .= $_;
}

my $attach = MIME::Base64::decode( $attachlines );

注意:我想当然地认为您知道 MIME 多部分表单是如何工作的,因此我不讨论如何以编程方式获取分隔符'--0015174c1274ee7ca60495ca69d5--'

于 2010-11-29T17:42:17.340 回答