使用PHP保存IMAP XLS附件

时间:2013-04-23 19:38:25

标签: php imap xls

我编写了一个脚本来检查我的Gmail帐户并从邮件中提取XLS文件附件。我使用以下代码从正文中获取附件:

$mege = imap_fetchbody($connection,$message_number,2);

正在检索邮件就好了。以下是上述代码的输出示例:

- 苹果邮件= _9EBAFC63-4E12-4E64-A4F9-F8D5834F3523内容传送编码:7位的Content-Type:text / html的; charset = us-ascii --Apple-Mail = _9EBAFC63-4E12-4E64-A4F9-F8D5834F3523 Content-Disposition:attachment; filename = test.xls Content-Type:application / octet-stream; X-MAC型= 584C5338; X-MAC-创作者= 5843454C;的x UNIX的模式= 0644;名称= “TEST.XLS” 内容传输编码:BASE64 0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7 / CQAGAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAA EAAAIQAAAAEAAAD + //// AAAAAAAAAAD /////////////////////////// ////////////////// //////////////////////////////// //////////////////////////////////////////// ////// ////////////////////////////////////////////////// //////////////////// /////////////// bABpAGIAcgBpADEAHgDwAAAACACQAQAAAAIA2gcBQwBhAGwAaQBiAHIAaQAxAB4A8AAAAAgAkAEA ...

这是预期的,因为XLS文件是base64编码的。但是,当我解码消息并保存到文件时,我得到一个空的excel文件。但是,它是一个excel文件。

我在写入文件之前使用它来解码内容:

$message=imap_base64($mege);

我想知道为了填充文件,我是否应该对附件做更多的事情。

1 个答案:

答案 0 :(得分:0)

您正在获取邮件的全部内容,而不仅仅是附件。缺少的是解析MIME结构,找到实际有趣部分的代码,从MIME容器中提取该部分,并且仅在根据Content-Transfer-Encoding标题进行解码之后(在此特定情况下为“base64”)。你不能盲目地对整个身体进行64解码,并希望得到一个附件作为回报。