Pregunta

Tengo un archivo que contiene un correo electrónico en "Formato de mensaje de texto de texto sin formato". No estoy seguro de si este es el formato EML. El correo electrónico contiene un archivo adjunto y quiero extraer el archivo adjunto y crear esos archivos nuevamente. Así es como se ve la parte del archivo adjunto -

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

Puedo ver que la parte entre X-Attachment-Id: f_gj5n2yx60 y ZyBmZyAKCjIKNDIzCnQ2Mwo=, ambos incluyen el contenido del primer archivo adjunto. Quiero analizar esos archivos adjuntos (nombres de archivos y contenido y crear esos archivos).

Obtuve este archivo después de analizar un archivo de formato DBX usando un Analizador Clase disponible en clases de PHP.

Busqué en muchos lugares y no encontré mucha discusión sobre esto aquí en tan poco que no sea Script para analizar correos electrónicos para archivos adjuntos. Puede que me pierda algunos términos mientras busco. En esa respuesta se menciona -

Puede usar los límites para extraer la información codificada Base64

Pero no estoy seguro de cuáles son los límites y cómo usar exactamente los límites. Ya debe haber algunas bibliotecas o algún método bien definido para hacerlo. Supongo que cometeré muchos errores si intento reinventar la rueda aquí.

¿Fue útil?

Solución

Hay una extensión PHP MailParse, ¿lo has probado?

La forma manual sería procesar el correo de línea por línea. Cuando presiona su primer encabezado de tipo de contenido (este en su ejemplo): Type de contenido: multipart/mixed; Límite = 20CF3054AC85D97721049A465E12

Tienes el límite. Esta cadena se usa como el límite entre sus múltiples partes (por eso lo llaman multipart). Cada vez que una línea comienza con los guiones y esta cadena, comienza una nueva parte. En su ejemplo: --20CF3054AC85D97721049A465E12

Cada parte comenzará con encabezados, una línea en blanco y contenido. Al observar el tipo de contenido de los encabezados, puede determinar cuáles son los archivos adjuntos, cuál es su tipo y su nombre de archivo. Lea todo el contenido, tira los espacios, base64_Decode y obtendrá el contenido binario del archivo. ¿Esto ayuda?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top