Domanda

Ho un file contenente una e-mail in "formato di messaggio di testo normale MIME". Non sono sicuro se questo è il formato EML. L'e-mail contiene un allegato e voglio estrarre l'attaccamento e creare nuovamente i file. Questo è come l'attaccamento sembra parte come -

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

posso vedere che la parte compresa tra X-Attachment-Id: f_gj5n2yx60 e ZyBmZyAKCjIKNDIzCnQ2Mwo=, entrambi inclusi è il contenuto del primo allegato. Voglio analizzare quegli allegati (nomi di file e contenuti e di creare tali file).

Ho ottenuto questo file dopo l'analisi di un file di formato dbx utilizzando un DBX Parser classe disponibili in classi PHP.

Ho cercato in molti posti e non ha trovato molte discussioni riguardo a questa qui a SO diverso da script per analizzare le email per gli allegati . Può essere Ho perso alcuni termini durante la ricerca. In quella risposta è menzionato -

è possibile utilizzare le boundries all'estratto il base64 informazioni codificate

Ma non sono sicuro che sono i confini e come esattamente di utilizzare i confini? Ci deve essere già alcune librerie o un metodo ben definito di fare questo. Credo che commetterò molti errori se provo reinventare la ruota qui.

È stato utile?

Soluzione

C'è un'estensione PHP Mailparse, hai provato?

Il modo manuale sarebbe, elaborare la linea di posta elettronica per riga. Quando si colpisce il vostro primo header Content-Type (questo nel tuo esempio): Content-Type: multipart / mixed; boundary = 20cf3054ac85d97721049a465e12

Hai il confine. Questa stringa viene utilizzata come il confine tra le parti multiple (è per questo che lo chiamano più parti). Ogni volta che una linea inizia con i trattini e questa stringa, una nuova parte iniziare. Nel tuo esempio: --20cf3054ac85d97721049a465e12

Ogni parte inizia con le intestazioni, una riga vuota, e contenuti. Guardando il tipo di contenuto delle intestazioni è possibile determinare quali sono gli allegati, quale sia il loro tipo è e il loro nome. Leggi l'intero contenuto, spogliare gli spazi, base64_decode esso, e hai il contenuto binario del file. Fa questo aiuto?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top