2010-06-16 34 views
12

Estoy escribiendo un script de Python para procesar correos electrónicos devueltos desde Procmail. Como se sugiere en este question, estoy usando la siguiente configuración de Procmail:Analizando el correo electrónico con Python

:0: 
|$HOME/process_mail.py 

Mi script process_mail.py está recibiendo un correo electrónico a través de la entrada estándar como esto:

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 

Estoy tratando de analizar el mensaje de esta manera:

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

Quiero obtener campos de mensaje como 'Desde', 'Hasta' y 'Asunto'. Sin embargo, el objeto de mensaje no contiene ninguno de estos campos.

¿Qué estoy haciendo mal?

Respuesta

9

Debe asegurarse de que las líneas no están accidentalmente rotos (como están arriba, aunque es difícil decir si fue un problema de copiar y pegar) - con un intac mensaje t, tales como:

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 

entonces

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

grabados TEST 12 como deseados.

+0

¿Cómo obtener el cuerpo del correo electrónico aquí? – Anuj

+0

Si realmente quieres todo el cuerpo del correo electrónico RFC2822 con estructuras MIME en bruto y todo, analizar el mensaje en Python es básicamente superfluo; el cuerpo lo es todo después de la primera línea vacía. Normalmente, con mensajes modernos, quiere analizar la estructura MIME y extraer una o más partes del cuerpo. – tripleee

1

Respondo a mí mismo.

Encontré un error en el código que crea los mensajes. Está agregando saltos de línea entre algunas líneas, lo que impide que el analizador funcione correctamente.

3

Parece que usted tiene saltos de línea sin espacios antepuestas a las líneas adicionales, que según RFC 2822 §2.3.2 es ilegal:

Cada campo de encabezado es lógicamente una sola línea de caracteres que comprenden
el nombre del campo, el colon y el cuerpo del campo Para mayor comodidad,
y para tratar las limitaciones de caracteres de 998/78 por línea,
la parte del cuerpo de campo de un campo de encabezado se puede dividir en una representación de línea múltiple
; esto se llama "plegado". La regla general es
que siempre que este estándar permita plegar espacios en blanco (no
simplemente caracteres WSP), se puede insertar un CRLF antes de cualquier WSP. Para
ejemplo, el campo de cabecera:

Subject: This is a test 

se puede representar como:

Subject: This 
    is a test 

Debe ser algo como esto:

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 
Cuestiones relacionadas