2011-12-07 18 views
8

Tengo algunos problemas al intentar extraer todos los encabezados de correo electrónico en python. Sé cómo obtener los que estoy buscando, pero quiero guardar todos los encabezados y no estoy seguro de cómo hacerlo.Extraiga solo los encabezados de correo electrónico en python

lo tengo cargado en un objeto de correo electrónico

import email 
f = open(kwargs['opt_emailfile']) 
msg = email.message_from_file(f) 
f.close() 

para que pueda obtener

msg['To'] 
msg['From'] 

Pero quiero que todas las cabeceras

Solución

Esto es lo Lo hice gracias a la respuesta

 f = open(kwargs['opt_emailfile']) 
     msg = email.message_from_file(f) 
     f.close() 

     parser = email.parser.HeaderParser() 
     headers = parser.parsestr(msg.as_string()) 

     for h in headers.items(): 
      print h 
+0

¿Qué has intentado hasta ahora? ¿Tiene algún código que funcione parcialmente o que no funcione? – srgerg

+0

ok edité mi publicación a lo que tengo hasta ahora – Mike

Respuesta

13

Usando HeaderParser quizá:

from email.parser import HeaderParser 
parser = HeaderParser() 
h = parser.parsestr(email) 

print h.keys() 

me he dado cuenta de que ha editado su pregunta. En realidad puede obtener la misma información de lo que tenía sin usar HeaderParser. p.ej. headers.items()will return lista de 2-tuplas con encabezados y valores correspondientes.

+0

Probablemente no sea una buena idea tener una variable llamada 'email' ya que es el nombre de un módulo, incluso si no está importando' email' directamente. – ccpizza

+1

Esto (y la "solución" del OP en la pregunta en sí) realmente devuelve todos los encabezados en orden, aunque el tipo 'keys()' implica un comportamiento tipo diccionario. – tripleee

+0

Adaptado esto en una respuesta mía a una pregunta relacionada: http://stackoverflow.com/a/42090598/874188 – tripleee

Cuestiones relacionadas