我已经写了一个脚本来检查我的Gmail帐户,并从邮件中提取XLS文件附件。我使用以下代码从正文中获取附件:
$mege = imap_fetchbody($connection,$message_number,2);邮件正在被正常检索。以下是上述代码的输出示例:
-Apple-Mail=_9EBAFC63-4E12-4E64-A4F9-F8D5834F3523内容传输编码: 7bit Content-Type: text/html;charset=us-ascii --Apple-Mail=_9EBAFC63-4E12-4E64-A4F9-F8D5834F3523 Content-Disposition:附件;filename=test.xls Content-Type:应用程序/八位字节-流;x-mac-type=584C5338;x-mac-creator=5843454C;x-unix-mode=0644;name="test.xls“内容传输编码: base64 0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAA EAAAIQAAAAEAAAD+////AAAAAAAAAAD///////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///////////////bABpAGIAcgBpADEAHgDwAAAACACQAQAAAAIA2gcBQwBhAGwAaQBiAHIAaQAxAB4A8AAAAAgAkAEA...
这是意料之中的,因为XLS文件是base64编码的。然而,当我解码消息并保存到一个文件时,我得到一个空的excel文件。但是,这是一个excel文件。
在写入文件之前,我使用此命令对内容进行解码:
$message=imap_base64($mege);我想知道,为了填充文件,我是否应该对附件执行更多操作。
发布于 2013-04-24 04:59:47
您正在获取邮件的整个正文,而不仅仅是附件。缺少的是解析MIME结构的代码,定位实际感兴趣的部分,从MIME容器中提取该部分,然后根据Content-Transfer-Encoding标头(本例中的"base64“)进行解码。你不能盲目地对整个身体进行base64解码,并希望得到一个附件作为回报。
https://stackoverflow.com/questions/16177779
复制相似问题