12.2.2 Analisi di un messaggio email

La struttura degli oggetti messaggio pu� essere creata in uno o due modi: possono essere realizzati dall'interno, istanziando oggetti di tipo Message e sequenziandoli tramite chiamate di attach() e set_payload(), o possono essere creati analizzando una rappresentazione in puro testo di un messaggio email.

Il package email fornisce un parser (NdT: analizzatore) standard che comprende la maggior parte della struttura dei documenti email, inclusi i documenti MIME. Si pu� passare al parser una stringa o un oggetto di tipo file ed il parser restituir� l'istanza principale di Message della struttura dell'oggetto. Per messaggi semplici, non MIME, il carico utile di questo oggetto principale sar� simile ad una stringa contenente il testo del messaggio. Per messaggi MIME, l'oggetto principale restituir� True tramite il suo metodo is_multipart() e le sotto parti saranno accessibili tramite i metodi get_payload() e walk().

Notare che il parser pu� essere esteso in modo illimitato ed ovviamente � possibile implementare un parser partendo da zero. Non ci sono connessioni magiche tra il parser allegato al package email e la classe Message, quindi un parser personalizzato pu� creare alberi di oggetti messaggio in ogni modo si ritenga necessario.

Il parser primario � Parser, che analizza sia l'intestazione che il carico utile del messaggio. Nel caso di messaggi multipart, analizzer� ricorsivamente il corpo del messaggio contenitore. Sono supportate due modalit� di analisi, quella rigorosa, che generalmente rigetter� ogni messaggio non compatibile con l'RFC, e quella lasca, che prover� a sistemare i problemi di formattazione di MIME pi� comuni.

Il modulo email.Parser fornisce anche una seconda classe, chiamata HeaderParser che pu� essere utilizzata se si � solo interessati nelle intestazioni del messaggio. HeaderParser pu� essere molto pi� veloce in queste situazioni, poich� non prova ad analizzare il corpo del messaggio, in sostituzione imposta il carico utile al corpo del messaggio grezzo, come una stringa. HeaderParser ha la stessa API della classe classParser.



Subsections
Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.