首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从电子邮件附件中提取压缩的xls文件?

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

Stack Overflow用户
提问于 2015-04-21 07:27:45
回答 3查看 528关注 0票数 0

我有一个模块,应该是提取电子邮件附件,并将它放在一个特定的位置。代码创建了用于获取邮件的EMAIL::MIME::Attachment::Stripper客户机,并一直使用POP3模块提取附件如下。

代码语言:javascript
复制
     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在使用上述代码提取文件时,文件似乎被破坏了,因为:

  1. 该文件不会通过WinZip、WinRAR或7-Zip打开。
  2. 通过此脚本提取的文件的文件大小与使用Outlook提取的文件略有不同。

请就这一问题提供一些投入。

EN

回答 3

Stack Overflow用户

发布于 2015-04-21 12:55:14

问题就在这里

代码语言:javascript
复制
next if $a->{content_type} !~ /octet-stream/i;

zip的内容类型为application/zip

票数 0
EN

Stack Overflow用户

发布于 2015-04-23 05:57:39

@NeoNox,谢谢你的回复。但是perl系统只将该文件标识为八位流,而不是使用application/zip。

不管怎样,我都能找到解决办法。

我可以通过在二进制模式下编写文件来解决这个问题(请解释如下所示:

代码语言:javascript
复制
    binmode $fh;

在这里,文件是在二进制模式下写的,所以我不能将输出作为被破坏的文件。

票数 0
EN

Stack Overflow用户

发布于 2015-06-19 07:37:57

我发现了同样的问题。

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

它将下载电子邮件正文,任何jpgs或pngs等,但没有找到附加的xlsx,即使在电子邮件有附件下载。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29765627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档