2010-06-16 17 views
12

Sto scrivendo uno script Python per elaborare le e-mail restituite da Procmail. Come suggerito in questo question, sto usando il seguente Procmail config:Analisi dell'email con Python

:0: 
|$HOME/process_mail.py 

Il mio script process_mail.py sta ricevendo una e-mail tramite stdin come questo:

From hostname Tue Jun 15 21:43:30 2010 
Received: (qmail 8580 invoked from network); 15 Jun 2010 21:43:22 -0400 
Received: from mail-fx0-f44.google.com (209.85.161.44) 
by ip-73-187-35-131.ip.secureserver.net with SMTP; 15 Jun 2010 21:43:22 -0400 
Received: by fxm19 with SMTP id 19so170709fxm.3 
for <[email protected]>; Tue, 15 Jun 2010 18:47:33 -0700 (PDT) 
MIME-Version: 1.0 
Received: by 10.103.84.1 with SMTP id m1mr2774225mul.26.1276652853684; Tue, 15 
Jun 2010 18:47:33 -0700 (PDT) 
Received: by 10.123.143.4 with HTTP; Tue, 15 Jun 2010 18:47:33 -0700 (PDT) 
Date: Tue, 15 Jun 2010 20:47:33 -0500 
Message-ID: <[email protected]> 
Subject: TEST 12 
From: Full Name <[email protected]> 
To: [email protected] 
Content-Type: text/plain; charset=ISO-8859-1 

ONE 
TWO 
THREE 

sto cercando di analizzare il messaggio in questo modo:

>>> import email 
>>> msg = email.message_from_string(full_message) 

Desidero ricevere i campi del messaggio come "Da", "A" e "Oggetto". Tuttavia, l'oggetto messaggio non contiene nessuno di questi campi.

Cosa sto sbagliando?

risposta

9

È necessario assicurarsi che le linee non sono accidentalmente rotti (come sono sopra, anche se è difficile dire se fosse un problema di copia-incolla) - con un intac t messaggio del tipo:

Received: (qmail 8580 invoked from network); 15 Jun 2010 21:43:22 -0400 
Received: from mail-fx0-f44.google.com (209.85.161.44) by ip-73-187-35-131.ip.secureserver.net with SMTP; 15 Jun 2010 21:43:22 -0400 
Received: by fxm19 with SMTP id 19so170709fxm.3 for <[email protected]>; Tue, 15 Jun 2010 18:47:33 -0700 (PDT) 
MIME-Version: 1.0 
Received: by 10.103.84.1 with SMTP id m1mr2774225mul.26.1276652853684; Tue, 15 Jun 2010 18:47:33 -0700 (PDT) 
Received: by 10.123.143.4 with HTTP; Tue, 15 Jun 2010 18:47:33 -0700 (PDT) 
Date: Tue, 15 Jun 2010 20:47:33 -0500 
Message-ID: <[email protected]> 
Subject: TEST 12 
From: Full Name <[email protected]> 
To: [email protected] 
Content-Type: text/plain; charset=ISO-8859-1 

ONE 
TWO 
THREE 

poi

msg = email.message_from_string(msgtxt) 
print msg['Subject'] 

stampe TEST 12 come desiderato.

+0

Come ottenere il corpo dell'e-mail qui? – Anuj

+0

Se si desidera veramente l'intero corpo dell'email RFC2822 con strutture MIME non elaborate e tutto, l'analisi del messaggio in Python è sostanzialmente superflua; il corpo è tutto dopo la prima linea vuota. Normalmente, con i messaggi moderni, si desidera analizzare la struttura MIME ed estrarre una o più parti del corpo. – tripleee

1

Rispondo a me stesso.

Ho trovato un errore nel codice che crea i messaggi. Sta aggiungendo interruzioni di linea tra alcune linee, impedendo al parser di funzionare correttamente.

3

Sembra che avete linefeeds senza spazi anteporre alle linee aggiuntive, che secondo RFC 2822 §2.3.2 è illegale:

Ogni campo di intestazione è logicamente una sola riga di caratteri,
il nome del campo, i due punti e il corpo del campo. Per comodità
tuttavia, e per gestire le limitazioni di 998/78 caratteri per riga,
, la parte del corpo campo di un campo di intestazione può essere suddivisa in una rappresentazione multipla riga; questo è chiamato "pieghevole". La regola generale è
che ovunque questo standard consenta di piegare lo spazio bianco (non
semplicemente caratteri WSP), un CRLF può essere inserito prima di qualsiasi WSP. Ad
esempio, il campo di intestazione:

Subject: This is a test 

può essere rappresentato come:

Subject: This 
    is a test 

Dovrebbe essere qualcosa di simile:

From hostname Tue Jun 15 21:43:30 2010 
Received: (qmail 8580 invoked from network); 15 Jun 2010 21:43:22 -0400 
Received: from mail-fx0-f44.google.com (209.85.161.44) 
    by ip-73-187-35-131.ip.secureserver.net with SMTP; 15 Jun 2010 21:43:22 -0400 
Received: by fxm19 with SMTP id 19so170709fxm.3 
    for <[email protected]>; Tue, 15 Jun 2010 18:47:33 -0700 (PDT) 
MIME-Version: 1.0 
Received: by 10.103.84.1 with SMTP id m1mr2774225mul.26.1276652853684; Tue, 15 
    Jun 2010 18:47:33 -0700 (PDT) 
Received: by 10.123.143.4 with HTTP; Tue, 15 Jun 2010 18:47:33 -0700 (PDT) 
Date: Tue, 15 Jun 2010 20:47:33 -0500 
Message-ID: <[email protected]> 
Subject: TEST 12 
From: Full Name <[email protected]> 
To: [email protected] 
Content-Type: text/plain; charset=ISO-8859-1 

ONE 
TWO 
THREE