我有一个包含“纯文本MIME消息格式”电子邮件的文件。我不确定这是否是EML格式。该电子邮件包含一个附件,我想提取附件并再次创建这些文件。这就是附件部分的样子 -

...
...
Receive, deliver details
...
...
From: sac ascsac <sacsac@sacascsac.ascsac>

Date: Thu, 20 Jan 2011 18:05:16 +0530

Message-ID: <AANLkTimmSL0iGW4rA3tvSJ9M3eT5yZLTGsqvCvf2fFC3@mail.gmail.com>

Subject: Test attachments

To: ascsacsa@ascsac.com

Content-Type: multipart/mixed; boundary=20cf3054ac85d97721049a465e12



--20cf3054ac85d97721049a465e12

Content-Type: multipart/alternative; boundary=20cf3054ac85d97717049a465e10



--20cf3054ac85d97717049a465e10

Content-Type: text/plain; charset=ISO-8859-1



hello this is a test mail. It contains two attachments



--20cf3054ac85d97717049a465e10

Content-Type: text/html; charset=ISO-8859-1



hello this is a test mail. It contains two attachments<br>


--20cf3054ac85d97717049a465e10--

--20cf3054ac85d97721049a465e12

Content-Type: text/plain; charset=US-ASCII; name="simple_test.txt"

Content-Disposition: attachment; filename="simple_test.txt"

Content-Transfer-Encoding: base64

X-Attachment-Id: f_gj5n2yx60



aGVsbG8gd29ybGQKYWMgYXNj
...
encoded things here
...
ZyBmZyAKCjIKNDIzCnQ2Mwo=

--20cf3054ac85d97721049a465e12

Content-Type: application/x-httpd-php; name="oscomm_backup_code.php"

Content-Disposition: attachment; filename="oscomm_backup_code.php"

Content-Transfer-Encoding: base64

X-Attachment-Id: f_gj5n5gxn1



PD9waHAKCg ...
...
encoded things here
...
X2xpbmsoRklMRU5BTUVfQkFDS1VQKSk7Cgo/Pgo=
--20cf3054ac85d97721049a465e12--

我可以看到这部分 X-Attachment-Id: f_gj5n2yx60ZyBmZyAKCjIKNDIzCnQ2Mwo=, ,包括第一个附件的内容。我想解析这些附件(文件名和内容并创建这些文件)。

在解析DBX格式文件后,我使用了此文件 DBX解析器 PHP课程中可用的类。

我在许多地方搜索过,但在这里没有发现太多讨论 脚本解析附件的电子邮件. 。可能是我在搜索时错过了一些条款。在这个答案中,提到了 -

您可以使用边界来提取基本64编码的信息

但是我不确定哪些边界以及如何确切使用边界?必须有一些库或一些明确的方法来执行此操作。我想如果我尝试在这里重新发明轮子,我会犯很多错误。

有帮助吗?

解决方案

有PHP MailParse扩展程序,您尝试过吗?

手动方式将是按线路处理邮件。当您击中第一个内容类型标头时(示例中的此):content-type:multipart/mixed;边界= 20CF3054AC85D97721049A465E12

你有边界。该字符串用作您多个部分之间的边界(这就是为什么他们称其为Multipart)。每次一行以破折号和此字符串开头,一个新的部分开始。在您的示例中:-20CF3054AC85D97721049A465E12

每个部分都将从标题,空白行和内容开始。通过查看标题的内容类型,您可以确定哪些附件,它们的类型是什么以及它们的文件名。读取整个内容,剥离空格,base64_decode it,您拥有文件的二进制内容。这有帮助吗?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top