用PHP保存IMAP XLS附件


Saving IMAP XLS Attchements with PHP

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

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

消息正在正常检索。下面是上面代码的输出示例:

-Apple-Mail=_9EBAFC63-4E12-4E64-A4F9-F8D5834F3523 Content-Transfer-Encoding: 7bit Content-Type: text/html;charset=us-ascii—Apple-Mail=_9EBAFC63-4E12-4E64-A4F9-F8D5834F3523内容-处置:附件;filename=test.xls内容类型:application/octet-stream;x-mac-type = 584 c5338;x-mac-creator = 5843454 c;x-unix-mode = 0644;name = " test.xls " Content-Transfer-Encoding: base64 0 m8r4kgxgueaaaaaaaaaaaaaaaaaaaaapgadap7/CQAGAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAA EAAAIQAAAAEAAAD +////AAAAAAAAAAD////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////bABpAGIAcgBpADEAHgDwAAAACACQAQAAAAIA2gcBQwBhAGwAaQBiAHIAaQAxAB4A8AAAAAgAkAEA……

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

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

$message=imap_base64($mege);

我想知道是否有更多的我应该做的附件,以填充文件。

您正在获取邮件消息的全文,而不仅仅是附件。缺少的是解析MIME结构的代码,找到实际感兴趣的部分,从MIME容器中提取该部分,然后根据Content-Transfer-Encoding标头(在此特殊情况下的"base64")进行解码。您不能盲目地对整个主体进行base64解码,并希望得到一个附件作为回报。