Правильный способ разбора вложений электронной почты из формата EML на PHP - PullRequest
0 голосов
/ 27 января 2011

У меня есть файл, содержащий электронное письмо в формате «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_gj5n2yx60 и ZyBmZyAKCjIKNDIzCnQ2Mwo=, в том числе содержимое первого вложения.Я хочу проанализировать эти вложения (имена файлов и их содержимое и создать эти файлы).

Я получил этот файл после анализа файла формата dbx с использованием класса DBX Parser , доступного в классах PHP.

Я искал во многих местах и ​​не нашел большого обсуждения по этому поводу здесь, кроме SO 1012 * Script для разбора писем на вложения .Может быть, я пропустил некоторые термины при поиске.В этом ответе упоминается -

вы можете использовать границы для извлечения закодированной в base64 информации

Но я не уверен, какие границы и как именно использоватьграницы?Там уже должно быть несколько библиотек или какой-то четко определенный способ сделать это.Думаю, я совершу много ошибок, если попытаюсь изобрести колесо здесь.

1 Ответ

1 голос
/ 27 января 2011

Есть расширение PHP Mailparse, вы пробовали его?

Ручной способ обработки почты - построчно.Когда вы нажмете свой первый заголовок Content-Type (этот в вашем примере): Content-Type: multipart / mixed;border = 20cf3054ac85d97721049a465e12

У вас есть граница.Эта строка используется в качестве границы между вашими несколькими частями (поэтому они называют ее составной).Каждый раз, когда строка начинается с тире и этой строки, начинается новая часть.В вашем примере: --20cf3054ac85d97721049a465e12

Каждая часть будет начинаться с заголовков, пустой строки и содержимого.Просматривая тип содержимого заголовков, вы можете определить, какие являются вложениями, каков их тип и имя файла.Прочитайте весь контент, уберите пробелы, base64_decode, и вы получите двоичное содержимое файла.Это помогает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...