1

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

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

正在检索该消息。以下是上述代码的输出示例:

-Apple-Mail=_9EBAFC63-4E12-4E64-A4F9-F8D5834F3523 内容传输编码:7bit 内容类型:text/html;charset=us-ascii --Apple-Mail=_9EBAFC63-4E12-4E64-A4F9-F8D5834F3523 内容处置:附件;文件名=test.xls 内容类型:应用程序/八位字节流;x-mac-type=584C5338; x-mac-creator=5843454C; x-unix-模式=0644;name="test.xls" Content-Transfer-Encoding: base64 0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA EAAAIQAAAAEAAAD+////AAAAAAAAAAD//////////////////////// ///////////////////////////////////////// ///////////////////////////////////////// ///////////////////////////////////////// /////////////////////////////bABpAGIAcgBpADEAHgDwAAAACACQAQAAAAIA2gcBQwBhAGwAaQBiAHIAaQAxAB4A8AAAAgAkAEA...

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

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

$message=imap_base64($mege);

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

4

1 回答 1

0

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

于 2013-04-23T20:59:47.200 回答