我有一个模块应该提取电子邮件附件并将其放在特定位置。代码创建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 。在使用上述代码提取文件时,文件似乎被破坏了,因为:
请就此问题提供一些意见。
答案 0 :(得分:0)
问题出在这里
next if $a->{content_type} !~ /octet-stream/i;
zip的内容类型为application / zip
答案 1 :(得分:0)
@NeoNox,感谢您的回复。但是perl系统只将文件标识为八位字节流,而不是应用程序/ zip。
无论如何,我可以找到解决方案。
我可以通过以二进制模式编写文件来解决问题(明确提到如下:
binmode $fh;
此处文件正在以二进制模式写入所以我不会将输出作为损坏的文件。
答案 2 :(得分:0)
我发现了同样的问题。
XLSX文件不被视为附件。 我正在使用IMAP。
它会下载电子邮件正文,任何jpgs或png等,但即使在包含已下载附件的电子邮件中也找不到附加的xlsx。