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.