2016-03-04 4 views
2

Новое на python, с некоторыми проблемами с этим.
Получаю электронные письма от gmail через imap (с кодом стартера от https://yuji.wordpress.com/2011/06/22/python-imaplib-imap-example-with-gmail/) и хочу найти конкретное письмо (которое я могу извлечь) для определенной строки. Что-то вроде этогоPython search imap email для строки

ids = data[0] 
id_list = ids.split() 
ids = data[0] 
id_list = ids.split() 
latest_email_id = id_list[-1] 
result, data = mail.fetch(latest_email_id, "(RFC822)") 
raw_email = data[0][1] 

def search_raw(): 
    if 'gave' in raw_email: 
     done = 'yes' 
    else: 
     done = 'no' 

и он всегда устанавливает, что нет. Вот результат для электронной почты (для основной части электронного письма)

Content-Type multipart/related;boundary=1_56D8EAE1_29AD7EA0;type="text/html" 
--1_56D8EAE1_29AD7EA0 
Content-Type text/html;charset="UTF-8" 
Content-Transfer-Encoding base64 

PEhUTUw+CiAgICAgICAgPEhFQUQ+CiAgICAgICAgICAgICAgICA8VElUTEU+PC9USVRMRT4KICAg 
ICAgICA8L0hFQUQ+CiAgICAgICAgPEJPRFk+CiAgICAgICAgICAgICAgICA8UCBhbGlnbj0ibGVm 
dCI+PEZPTlQgZmFjZT0iVmVyZGFuYSIgY29sb3I9IiNjYzAwMDAiIHNpemU9IjIiPlNlbnQgZnJv 
bSBteSBtb2JpbGUuCiAgICAgICAgICAgICAgICA8QlI+X19fX19fX19fX19fX19fX19fX19fX19f 
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXzwvRk9OVD48L1A+CgogICAgICAg 
ICAgICAgICAgPFBSRT4KR2F2ZQoKPC9QUkU+CiAgICAgICAgPC9CT0RZPgo8L0hUTUw+Cg== 
--1_56D8EAE1_29AD7EA0-- 

Я знаю, что проблема заключается в HTML, но не может понять, как разобрать электронную почту должным образом.

Спасибо!

+0

Какой тип вывода для электронной почты? Это JSON или строка или что-то в этом роде? –

ответ

0

Текст, указанный выше, является кодировкой base64. У Python есть модуль с именем base64, который дает вам возможность его декодировать.

import base64 
import re 


def has_gave(raw_email): 
    email_body = base64.b64decode(raw_email) 
    match = re.search(r'.*gave.*', email_body , re.IGNORECASE) 
    if match: 
     done = 'yes' 
     print 'match found for word ', match.group() 
    else: 
     done = 'no' 
     print 'no match found' 

    return done 

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

  • Нет связанных вопросов^_^