我已经编写了一个脚本来检查我的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解码,并希望得到一个附件作为回报。