2015-10-12 6 views
2

Я пытаюсь использовать python и email.Parser для анализа электронной почты из файла. Я использую следующую команду:Как извлечь тело электронной почты из файла с помощью электронной почты. Парсер?

headers = Parser().parse(open(filename, 'r')) 

для разбора файла. Но когда я пытаюсь получить тело, которое я использую, например,

print(headers.get_payload()[0]) 

и я получаю что-то вроде

From nobody Mon Oct 12 16:32:25 2015 
Content-Type: text/plain; charset=UTF-8 
Content-Transfer-Encoding: quoted-printable 

Hi Alex, 
.... 

Есть ли какой-нибудь способ, чтобы избавиться от этих первых трех/четырех строк? И как декодировать контент, например 'fr = C3 = BCher'?

ответ

2

Чтобы попасть в тело сообщения, вы должны идти() это разные части, то есть:

a = email.message_from_file(open(filename, 'r')) #shorthand for Parser().parse 
body = '' 

if a.is_multipart(): 
    for part in b.walk(): 
     ctype = part.get_content_type() 
     cdispo = str(part.get('Content-Disposition')) 

     # skip any text/plain (txt) attachments 
     if ctype == 'text/plain' and 'attachment' not in cdispo: 
      body = part.get_payload(decode=True) # decode 
      break 
# not multipart - i.e. plain text, no attachments 
else: 
    body = b.get_payload(decode=True) 

декодирования = True в get_payload() выполняет декодирование base64/etc, то есть строки «fr = C3 = BCher»

+0

Большое спасибо, кажется, сработало! – Alex

+0

уверенная вещь; вы можете проверить немного более длинную напыщенность мной на эту тему, в вопросе Анураг связал – Todor

Смежные вопросы