12.4 mailbox -- Gestione dei vari tipi di mailbox

Questo modulo definisce un certo numero di classi che permettono un facile ed uniforme accesso ai messaggi di posta in una mailbox (di tipo Unix).

class UnixMailbox( fp[, factory])
Accede ad una classica mailbox in stile Unix, dove tutti i messaggi sono contenuti in un singolo file e separati dalle linee che iniziano con "From " (leggere "From_"). L'oggetto file fp punta al file della mailbox. Il parametro facoltativo factory è un oggetto invocabile che dovrebbe creare nuovi oggetti messaggio. factory viene chiamato con un argomento, ottenuto dalla chiamata del metodo next() su fp. Il tipo predefinito per l'oggetto messaggio è rfc822.Message (vedere il modulo rfc822 - e le relative note).

Note: Per ragioni legate all'implementazione di questo modulo, si dovrà probabilmente aprire l'oggetto fp in modalità binaria. Questo è particolarmente importante su Windows.

Per una maggiore portabilità, i messaggi in una mailbox in stile Unix vengono separati da una riga che inizia esattamente con la stringa 'From ' (notare lo spazio finale) se preceduta da esattamente due fine riga. A causa però delle numerose variazioni esistenti rispetto a questa organizzazione, non si dovrebbe considerare nient'altro che la riga From_. Comunque, l'implementazione corrente non si preoccupa della mancanza dei due fine riga. Il che va bene per molte applicazioni.

La classe UnixMailbox si comporta in modo più rigido riguardo alla separazione dei vari messaggi, in quanto usa un'espressione regolare che di solito riconosce correttamente i delimitatori From_. Essa considera che le separazioni siano in base a righe del tipo "From name time". Per una maggiore portabilità è meglio però usare la classe PortableUnixMailbox. È identica a UnixMailbox, tranne per il fatto che i singoli messaggi vengono considerati separati da righe "From " e non "From name time".

Per altre informazioni, vedere Unix: Unix: Why the Content-Length Format is Bad" >Configuring Netscape Mail on Unix: Why the Content-Length Format is Bad.

class PortableUnixMailbox( fp[, factory])
Una versione più leggera di UnixMailbox, che considera solo il "From " all'inizio delle righe che separano i messaggi. La parte ``name time'' della riga viene ignorata, per poter essere compatibile con le variazioni che esistono su questo formato. Questa classe lavora sulle righe del messaggio che iniziano con 'From ', che vengono evidenziate dai software di gestione della posta al momento del trasporto.

class MmdfMailbox( fp[, factory])
Accede ad una mailbox stile MMDF, in cui tutti i messaggi vengono racchiusi in un singolo file e sono separati da 4 caratteri ``Ctrl-A''. L'oggetto file fp punta al file della mailbox. Il parametro facoltativo factory ha le stesse funzioni di quello della classe UnixMailbox.

class MHMailbox( dirname[, factory])
Accede ad una mailbox di tipo MH, dove ogni messaggio è in un singolo file con un nome numerico e tutti questi file sono in una directory. Il nome della directory viene passato in dirname. Per il parametro facoltativo factory vedere la classe UnixMailbox.

class Maildir( dirname[, factory])
Accede ad una directory di messaggi di tipo Qmail. Tutti i messaggi nuovi presenti all'interno della directory passata come parametro dirname diventano accessibili. Per il parametro facoltativo factory vedere la classe UnixMailbox.

class BabylMailbox( fp[, factory])
Accede ad una mailbox Babyl, che è simile a quella di tipo MMDF. Nel formato Babyl, ogni messaggio ha due tipi di intestazioni, le intestazioni originali, e quelle visibili. Le intestazioni originali appaiono prima di una riga contenente solo EOOH (End-Of-Original-Headers), mentre le intestazioni visibili si trovano dopo. I gestori di mailbox compatibili con Babyl mostreranno solamente le intestazioni visibili, e gli oggetti BabylMailbox restituiranno i messaggi con solo questo tipo di intestazioni. Per poter avere anche le intestazioni originali è necessario analizzare la mailbox ``da soli''. I messaggi iniziano con la linea EOOH e terminano con una riga contenente i caratteri '\037\014'. Il parametro factory è analogo a quello della classe UnixMailbox.

Dato che il modulo rfc822 è deprecato, si raccomanda l'uso del modulo email per creare gli oggetti messaggio da una mailbox (il modulo rfc822 non può essere eliminato per questioni di compatibilità). Un modo molto sicuro per fare ciò è il seguente:

import email
import email.Errors
import mailbox

def msgfactory(fp):
    try:
        return email.message_from_file(fp)
    except email.Errors.MessageParseError:
        # Non fatevi restituire None, perché
        # si fermerebbe l'iteratore della mailbox
	return ''

mbox = mailbox.UnixMailbox(fp, msgfactory)

Il codice precedente è difensivo rispetto alla struttura della mailbox, in quanto si è preparati a ricevere un'eventuale stringa vuota dal metodo next() della mailbox. Comunque, se si è sicuri che la mailbox è perfettamente standard, è possibile semplificare il codice:

import email
import mailbox

mbox = mailbox.UnixMailbox(fp, email.message_from_file)

Vedete anche:

mbox - file contenente i messaggi di posta
Descrizione del formato tradizionale della mail box ``mbox''.
maildir - directory per i nuovi messaggi ricevuti
Descrizione del formato ``maildir'' di una mailbox.
Configurare la posta in Netscape su Unix: perché il formato Content-Length è pessimo
Una descrizione dei problemi correlati alle intestazioni Content-Length: per i messaggi memorizzati in file mailbox.



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