12.11 rfc822 -- Analizza le intestazioni di posta RFC 2822

Deprecato dalla versione 2.3 di Python. Si dovrebbe utilizzare, invece del modulo rfc822, il package email. Il modulo rfc822 è presente solamente per compatibilità con le versioni precedenti.

Questo modulo definisce una classe, Message, che rappresenta un ``messaggio di posta elettronica,'' così come definito dallo standard Internet RFC 2822.12.5Tali messaggi si compongono di una collezione di intestazioni di messaggio e di un corpo del messaggio. Questo modulo definisce inoltre una classe helper, AddressList, per l'analisi di indirizzi RFC 2822. Far riferimento alla RFC per informazioni sulla sintassi specifica dei messaggi RFC 2822.

Il modulo mailbox fornisce classi per leggere le caselle di posta prodotte da vari programmi di gestione di posta elettronica.

class Message( file[, seekable])
Un'istanza di Message viene istanziata con un oggetto di input come parametro. Il messaggio fa affidamento sulla presenza nell'oggetto di input di un metodo readline(): nello specifico, i comuni oggetti file soddisfano tale requisito. L'istanziazione legge le intestazioni dall'oggetto di input fino ad una riga di delimitazione (normalmente una riga vuota) e li memorizza nell'istanza. Il corpo del messaggio, consecutivo all'intestazione, non viene utilizzato.

Questa classe può trattare ogni oggetto di input che supporti un metodo readline(). Se l'oggetto di input possiede le funzionalità seek e tell, sarà attivo anche il metodo rewindbody(); altrimenti, righe non conformi verranno respinte indietro nel flusso di input. Se l'oggetto di input non possiede la funzionalità seek ma possiede un metodo unread() che può respingere indietro una riga di input, Message lo utilizzerà per respingere indietro le righe non conformi. Quindi questa classe può essere utilizzata per analizzare messaggi provenienti da un flusso bufferizzato.

L'argomento facoltativo seekable viene fornito come rimedio per certe librerie stdio nelle quali tell() elimina i dati bufferizzati prima di scoprire che la chiamata di sistema lseek() non funziona. Per la massima portabilità, dovreste impostare l'argomento seekable a zero, per evitare la chiamata iniziale a tell() quando viene passato in input un oggetto unseekable come ad esempio un oggetto file creato da un oggetto socket.

Le righe di input, così come lette dal file, possono essere sia terminate dalla coppia CR-LF che da un singolo linefeed; una terminazione CR-LF viene sostituita da un singolo linefeed prima di memorizzare la riga.

Il controllo di corrispondenza dell'intestazione viene svolto in modalità non sensibile a maiuscole o minuscole; ad esempio m['From'], m['from'] e m['FROM'] conducono tutti allo stesso risultato.

class AddressList( field)
Potete istanziare la classe helper AddressList utilizzando un singolo parametro stringa o anche una lista separata da virgole di indirizzi RFC 2822 da analizzare. Il parametro None produce una lista vuota.

quote( str)
Restituisce una nuova stringa con i backslash nella stringa str sostituiti da due backslash e le doppie virgolette sostituite da backslash-doppie virgolette.

unquote( str)
Restituisce una nuova stringa che è la versione senza virgolette della stringa str. Se str inizia e finisce con le doppie virgolette, queste vengono eliminate. Allo stesso modo se str inizia e finisce con le parentesi acute, queste vengono eliminate.

parseaddr( address)
Analizza il parametro address, che dovrebbe essere costituito dal valore di un campo contenente un indirizzo quale To: oppure Cc:, e lo divide nelle parti componenti ``realname'' ed ``email address'' (NdT: nome reale ed indirizzo di posta). Restituisce una doppia tupla con le precedenti informazioni, a meno che l'analisi fallisca, nel qual caso viene restituita la tupla (None, None).

dump_address_pair( pair)
È l'inverso di parseaddr(); riceve in ingresso una doppia tupla della forma (realname, email_address) e restituisce il valore stringa adatto per un header To: o Cc:. Se il primo elemento della coppia, pair, è falso, allora il secondo elemento viene restituito invariato.

parsedate( date)
Tenta di analizzare una data in base alle regole incluse nella RFC 2822. Comunque, alcuni programmi di posta non seguono il formato cosi come specificato ed allora parsedate() cerca di gestire il formato in maniera corretta. date è una stringa contenente una data in formato RFC 2822, del tipo 'Mon, 20 Nov 1995 19:12:08 -0500'. Se l'analisi ha successo, parsedate() restituisce una tupla di nove elementi che può essere passata direttamente a time.mktime(); altrimenti verrà restituito None. Notate che i campi 6, 7 e 8 della tupla risultante non sono utilizzabili.

parsedate_tz( date)
Svolge la stessa funzione di parsedate(), ma restituisce o None o una tupla di dieci elementi; i primi nove elementi costituiscono una tupla che può essere passata direttamente a time.mktime(), ed il decimo è lo scostamento di fuso orario della data UTC (che è la dicitura ufficiale per il Greenwich Mean Time). Notare che il segno che indica lo scostamento di fuso orario è l'opposto del segno della variabile time.timezone per lo stesso fuso orario; quest'ultima variabile segue lo standard POSIX mentre questo modulo segue l'RFC 2822. Se la stringa in input non specifica il fuso orario, l'ultimo elemento della tupla restituita avrà il valore None. Notare che i campi 6, 7 e 8 della tupla risultante non sono utilizzabili.

mktime_tz( tuple)
Trasforma una tupla di dieci elementi, così come restituita parsedate_tz() in un orario UTC. Se l'elemento fuso orario nella tupla vale None, si assume l'ora locale. Mancanza minore: questa funzione comincia con l'interpretare i primi 8 elementi come ora locale e quindi compensa tenendo conto della differenza di fuso orario; questo potrebbe portare ad un minimo errore sulle date di passaggio all'ora legale, comunque non tale da preoccupare per i comuni utilizzi.

Vedete anche:

Modulo email:
Pacchetto completo di gestione della posta elettronica; prevarica il modulo rfc822.
Modulo mailbox:
Classi per leggere vari formati delle caselle di posta prodotte da programmi client per la posta.
Modulo mimetools:
Sottoclasse di rfc822.Message per la gestione dei messaggi codificati MIME.



Footnotes

...2822.12.5
Questo modulo era originariamente conforme a RFC 822, da cui il nome. Successivamente, RFC 2822 è stato rilasciato come un aggiornamento di RFC 822. Questo modulo dovrebbe essere considerato conforme a RFC 2822, specialmente nei casi in cui è stata cambiata la sintassi o la semantica rispetto a RFC 822.



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