Правильный PHP-способ разбора вложений электронной почты из формата EML

StackOverflow https://stackoverflow.com/questions/4817312

Вопрос

У меня есть файл, содержащий электронное письмо в "формате обычного текстового 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 класс доступен в классах PHP.

Я искал во многих местах и не нашел особого обсуждения этого здесь, в SO, кроме Скрипт для анализа электронных писем на наличие вложений.Возможно, я пропустил некоторые термины при поиске.В этом ответе упоминается -

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

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

Это было полезно?

Решение

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top