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).
fp[, factory]) |
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.
fp[, factory]) |
'From '
, che vengono evidenziate dai software di gestione della
posta al momento del trasporto.
fp[, factory]) |
dirname[, factory]) |
dirname[, factory]) |
fp[, factory]) |
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: