我编写了一个脚本来检查我的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);
我想知道为了填充文件,我是否应该对附件做更多的事情。
答案 0 :(得分:0)
您正在获取邮件的全部内容,而不仅仅是附件。缺少的是解析MIME结构,找到实际有趣部分的代码,从MIME容器中提取该部分,并且仅在根据Content-Transfer-Encoding
标题进行解码之后(在此特定情况下为“base64”)。你不能盲目地对整个身体进行64解码,并希望得到一个附件作为回报。