Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 如何从电子邮件附件中提取压缩的xls文件?_Excel_Perl_Email_Zip_Email Attachments - Fatal编程技术网

Excel 如何从电子邮件附件中提取压缩的xls文件?

Excel 如何从电子邮件附件中提取压缩的xls文件?,excel,perl,email,zip,email-attachments,Excel,Perl,Email,Zip,Email Attachments,我有一个模块,应该提取电子邮件附件,并将其放置在一个特定的位置。代码创建了POP3客户端来获取邮件,并一直在使用EMAIL::MIME::Attachment::Stripper模块提取附件,如下所示 my $mail=$pop->HeadAndBody($i); my $parsed = Email::MIME->new($mail); my $stripper = Email::MIME::Attachment::Stripper->new($

我有一个模块,应该提取电子邮件附件,并将其放置在一个特定的位置。代码创建了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;
     }
my$mail=$pop->HeadAndBody($i);
my$parsed=Email::MIME->new($mail);
我的$stripper=Email::MIME::Attachment::stripper->new($parsed);
my@attachments=$stripper->attachments;
foreach my$a(@附件)
{
接下来如果$a->{content\u type}!~/octet stream/i;
my$f=新IO::File“C:/MAIL\u PARSING\u DATA/”,“w”或“die”无法创建文件!”;
打印$f$a->{payload};
去出口点;
}
对于Perl模块识别的标准文件(如电子表格等),代码运行良好,但对于特定的邮件,它的附件是一个压缩的Excel文件。提取文件时,Perl脚本为该文件识别的内容类型为应用程序/octet流。使用上述代码提取文件时,文件似乎已损坏,因为:

  • 无法通过WinZip、WinRAR或7-Zip打开文件
  • 通过此脚本提取的文件的文件大小与使用Outlook提取的相同文件略有不同
  • 请就这个问题提供一些意见。

    问题就在这里

    next if $a->{content_type} !~ /octet-stream/i;
    

    zip的内容类型为application/zip

    @neox,感谢您的回复。但是perl系统仅将文件标识为八位字节流,而不是application/zip

    无论如何,我能找到解决办法

    我可以通过以二进制模式写入文件来解决这个问题(具体说明如下:

        binmode $fh;
    

    在这里,文件是以二进制模式写入的,因此我不会将输出作为损坏的文件。

    我发现了相同的问题

    XLSX文件不被视为附件。 我正在使用IMAP

    它将下载电子邮件正文、任何JPG或PNG等,但即使在包含已下载附件的电子邮件中也找不到附加的xlsx