【发布时间】:2015-04-21 07:27:45
【问题描述】:
我有一个模块应该提取电子邮件附件并将其放置在特定位置。该代码创建 POP3 客户端来获取邮件,并一直使用 EMAIL::MIME::Attachment::Stripper 模块来提取附件,如下所示。
my $mail=$pop->HeadAndBody($i);
my $parsed = Email::MIME->new($mail);
my $stripper = Email::MIME::Attachment::Stripper->new($parsed);
my @attachments = $stripper->attachments;
foreach my $a(@attachments)
{
next if $a->{content_type} !~ /octet-stream/i;
my $f = new IO::File "C:/MAIL_PARSING_DATA/" . "<filename>.<file-extension>", "w" or die "Can not create file!";
print $f $a->{payload};
goto EXITPOINT;
}
该代码适用于 Perl 模块识别的标准文件,如电子表格等。但不适用于具有 压缩 Excel 文件作为附件的特定邮件。在提取文件时,该文件的 Perl 脚本识别的 content_type 是 application/octet-stream。使用上述代码提取文件时,文件似乎已损坏,因为:
- 文件未通过 WinZip、WinRAR 或 7-Zip 打开。
- 通过此脚本提取的文件的文件大小与使用 Outlook 提取的相同文件的大小略有不同。
请就这个问题提供一些意见。
【问题讨论】:
标签: excel perl email zip email-attachments