2011-01-18 7 views
21

Attualmente sto usando il file mimeDecode.php della libreria PEAR per analizzare le email in arrivo. Sembra che abbia molti problemi e non riesce a decodificare molti messaggi, quindi mi piacerebbe sostituirlo con qualcosa di meglio.Il modo migliore per gestire l'analisi/decodifica delle e-mail in PHP?

Sto cercando qualcosa che sia in grado di separare correttamente parti del messaggio, ad esempio da, corpo, ecc. Idealmente sarebbe in grado di gestire tutti i metodi di codifica comuni come base64, uuencode, stampabile quotato , ecc.

In situazioni in cui sia le versioni in testo normale sia quelle in html dello stesso messaggio sono contenute in una singola e-mail, mi piacerebbe che conoscesse la differenza tra loro in modo da poter scegliere quale parte desideravo visualizzare.

Non sono preoccupato per gli allegati in questo momento, ma sarebbe bello poterne avere conoscenza nel caso in cui volessi implementarlo in futuro.

Ho visto che PHP ha un gruppo di funzioni che iniziano con la parola imap che sembra possano fare ciò che vorrei, ma non sono sicuro senza averle provate.

Attualmente sto eseguendo la decodifica al volo dei messaggi in PHP, motivo per cui sto cercando una soluzione di sostituzione PHP.

Qualcuno ha un'esperienza con questo che potrebbe indicarmi la giusta direzione? Mi dispiacerebbe iniziare a usare qualcosa che finirebbe per non fare ciò di cui ho bisogno a lungo termine.

risposta

5

Divertente si dovrebbe chiedere ... In realtà sto lavorando su un semplice sistema di notifica ora. Ho appena finito il Bounce Manager con l'utilizzo di Zend_Mail da implementare. Ha praticamente tutte le funzionalità che stai cercando ... puoi connetterti a una casella di posta (POP3, IMAP, Mbox e Maildir), estrarre messaggi da esso e operare su tutti quei messaggi.

Gestisce messaggi multipart, ma le parti possono essere difficili da utilizzare. Ho avuto difficoltà a capire quale parte fosse la parte del messaggio originale allegata nel rapporto di mancato recapito con cui lavoravo, ma ho la sensazione che mi sia sfuggito qualcosa nella documentazione. Non sono sicuro di come gestisca la codifica, perché il mio utilizzo è stato abbastanza semplice, ma sono abbastanza sicuro che abbia disposizioni per tutte le codifiche che hai menzionato. Dai un'occhiata ai documenti e sfoglia l'API.

+0

fai a sapere se è possibile usare Zend_Mail senza il connettore di archiviazione? Vorrei passare un messaggio in arrivo come stringa e poter utilizzare i metodi associati ai messaggi su di esso senza che sia necessario provenire da un percorso di archiviazione. – Sgraffite

+2

Sì, sono sicuro che esiste un modo perché questa stessa classe viene utilizzata anche per inviare messaggi con le classi mailer/transport e in tal caso si costruiscono sempre stringhe/file di moduli di messaggi. Se ricordo che assomiglia a '$ m = new Zend_Mail_Message (array ('raw' => $ stringMessage));' Dai un'occhiata alla classe effettiva e ai commenti del doc per la verifica da parte del costruttore. – prodigitalson

+0

Questo ha finito per funzionare per me. Zend ha fatto alcune cose che non ho capito perché comunque. Zend genererà un'eccezione quando non riconosce un'intestazione. Nel mio caso, non mi interessano le intestazioni non riconosciute, quindi ho finito per commentare quell'eccezione. Esiste anche una funzione in cui Zend fa un foreach() su $ parti, ma a volte la variabile che sta cercando di foreach on è nullo, quindi ho aggiunto un controllo nullo e restituito $ res se è nullo. – Sgraffite

1

Attualmente sono alla ricerca di una libreria di analisi e-mail MIME robusta e di facile utilizzo e sto attualmente esaminando seriamente il componente Mail da componenti eZ. Ma se stai cercando qualcosa che lo renderà facile come echo $email->text; o echo $email->html;, come me, rimarrai deluso. In realtà, ora non penso che una tale semplificazione sia possibile, a causa del modo in cui funziona MIME. Ma sembra l'opzione migliore là fuori nel mondo PHP.

Ho iniziato a lavorare sul mio progetto corrente con il componente Zend_Mail, ma quando è arrivato il momento di scavare effettivamente all'interno di quelle parti di e-mail e delle intestazioni codificate, Zend_Mail ti lascia praticamente fuori al freddo. Devi fare la maggior parte della decodifica, il che non è affatto divertente.

Per quanto riguarda l'estensione PHP IMAP, ha lo scopo di gestire il recupero dei messaggi dalla casella di posta, non la decodifica MIME. Sebbene, abbia qualche funzione di decodifica utile che potrebbe essere necessario. Mailparse L'estensione PECL, d'altra parte, si occupa esattamente di quel set di problemi. Non l'ho ancora provato, ma sembra che tu debba scrivere molto codice per ottenere effettivamente i dati che desideri.

+0

Che sembra decente guardando i documenti. Ho già messo le ore per implementare e testare la libreria Zend_Mail e sembra funzionare abbastanza bene. Onestamente non posso dedicare più tempo al lavoro a esaminare una nuova biblioteca a questo punto. Grazie per la risposta però :) – Sgraffite

12

Ho recentemente sviluppato un parser di posta PHP e lo sto usando in produzione.
ho molto felice con lui e alcuni sviluppatori ha biforcuta è:

https://github.com/plancake/official-library-php-email-parser

+2

ottimo tizio della biblioteca! –

+1

Ehi, contento che ti piaccia! – dan

+1

Non gestisce bene gli allegati: contiene gli allegati codificati base64 all'interno del corpo HTML. E non ha affatto il tipo 'getAttachment()' di funzioni. – Slawa

3

ho biforcuta il php-mime-mail parser per correggere tutti i problemi: Fork of php-mime-mail-parser

più di 52 test e 764 affermazioni Code Coverage: 100 linee%, 100% Funzioni e metodi, 100% Classi e Tratti

È necessario il pacchetto PECL MailParse per utilizzarlo ma il wrapper è senza problemi e completamente testato.

4

So che questa domanda ha quattro anni ora ... ma alla fine ho avuto bisogno di una libreria di analisi della posta e non ero soddisfatto di nessuna delle opzioni disponibili. Volevo qualcosa di affidabile, compatibile con PSR-2, installabile tramite compositore.

composer require zbateson/mail-mime-parser 

Si avvale di corsi d'acqua che permettono di passare esso una connessione SMTP (per l'analisi una e-mail e la memorizzazione in un database, per esempio), o di un file o di un flusso di memoria ... quello che vuoi. Inoltre non memorizza tutte le informazioni in memoria - non ho ancora testato questo bit con un set di dati abbastanza grande, ma in teoria le e-mail con allegati molto grandi non utilizzeranno tutta la memoria di PHP.

https://github.com/zbateson/MailMimeParser

Scopri i wiki per una guida e l'API ... e se trovate bug/errori di battitura o di vedere i miglioramenti, si prega di contribuire :)

+0

Potrebbe essere necessario un po 'più di controllo qualità, ma prima impressione: funziona. Grazie, @Zaahid – tivnet

+1

Funziona alla grande! Trasmetto email da 40 + MB da una casella di posta di AWS SES su S3 con zero problemi. Biblioteca eccellente – bishop

Problemi correlati