Question

Je dispose d'un fichier contenant un e-mail dans le « format de message MIME texte brut ». Je ne suis pas sûr que ce soit le format EML. L'e-mail contient une pièce jointe et je veux extraire la pièce jointe et créer ces fichiers à nouveau. Voici comment la pièce de fixation ressemble -

...
...
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--

Je peux voir que la partie entre X-Attachment-Id: f_gj5n2yx60 et ZyBmZyAKCjIKNDIzCnQ2Mwo=, y compris à la fois est le contenu de la première pièce jointe. Je veux analyser les pièces jointes (noms de fichiers et de contenus et de créer ces fichiers).

Je suis ce fichier après l'analyse d'un fichier de format DBX en utilisant un la classe de DBX Parser disponibles dans les classes PHP.

Je recherche dans de nombreux endroits et n'a pas trouvé beaucoup de discussions au sujet de ce ici dans d'autres SO que Script pour analyser les courriels pour les pièces jointes . Peut-être que j'ai raté quelques termes lors de la recherche. Dans cette réponse, il est mentionné -

vous pouvez utiliser les boundries à l'extrait l'information codée base64

Mais je ne suis pas sûr sont les limites et comment exactement d'utiliser les limites? Il faut déjà quelques bibliothèques ou une méthode bien définie de le faire. Je suppose que je vais commettre beaucoup d'erreurs si j'essaie de réinventer la roue.

Était-ce utile?

La solution

Il y a une extension PHP Mailparse, avez-vous essayé?

Le mode manuel serait, traiter la ligne de messagerie en ligne. Lorsque vous frappez votre premier en-tête Content-Type (celui-ci dans votre exemple): Content-Type: multipart / mixed; boundary = 20cf3054ac85d97721049a465e12

Vous avez la frontière. Cette chaîne est utilisée comme la limite entre vos multiples parties (c'est pourquoi ils l'appellent multipart). A chaque fois une ligne commence par les tirets et cette chaîne, une nouvelle partie commencent. Dans votre exemple: --20cf3054ac85d97721049a465e12

Chaque partie commence par les en-têtes, une ligne blanche, et le contenu. En regardant le type de contenu des en-têtes, vous pouvez déterminer quels sont les pièces jointes, ce qui leur type et leur nom. Lire tout le contenu, dépouiller les espaces, base64_decode, et vous avez le contenu binaire du fichier. Est-ce que cette aide?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top