Forma adecuada de PHP para analizar los archivos adjuntos de correo electrónico desde el formato EML
-
25-10-2019 - |
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í.
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?