我有一个模块,应该是提取电子邮件附件,并将它放在一个特定的位置。代码创建了用于获取邮件的EMAIL::MIME::Attachment::Stripper客户机,并一直使用POP3模块提取附件如下。
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脚本为该文件提取的标识的application/octet-stream. content_type是content_type在使用上述代码提取文件时,文件似乎被破坏了,因为:
请就这一问题提供一些投入。
发布于 2015-04-21 12:55:14
问题就在这里
next if $a->{content_type} !~ /octet-stream/i;zip的内容类型为application/zip
发布于 2015-04-23 05:57:39
@NeoNox,谢谢你的回复。但是perl系统只将该文件标识为八位流,而不是使用application/zip。
不管怎样,我都能找到解决办法。
我可以通过在二进制模式下编写文件来解决这个问题(请解释如下所示:
binmode $fh;在这里,文件是在二进制模式下写的,所以我不能将输出作为被破坏的文件。
发布于 2015-06-19 07:37:57
我发现了同样的问题。
XLSX文件不被视为附件。我在用IMAP。
它将下载电子邮件正文,任何jpgs或pngs等,但没有找到附加的xlsx,即使在电子邮件有附件下载。
https://stackoverflow.com/questions/29765627
复制相似问题