2015-01-02 4 views
1

Я получаю None в результате для письма, которое я написал с помощью Thunderbird или gmail webapp.python imaplib fetch result is none с простой электронной почтой от gmail

Например моя тема «myfancysubject», а текст просто «привет»

я не получаю никаких данных (нет) с помощью imaplib выборки операции с

result, data = mail.fetch(latest_email_id, '(RFC822)') # fetch the email body (RFC822) for the given ID 

мое предположение почта имеет нет метки RFC822?

Но как я могу получить содержание этой почты?

вот мой полный код:

import imaplib 
import email 

try: 
    mail = imaplib.IMAP4_SSL('imap.gmail.com') 
    mail.login('[email protected]', 'password') 
    labels = mail.list() 
    # Out: list of "folders" aka labels in gmail. 
    inbox = mail.select("inbox") # connect to inbox. 
    #result, data = mail.search(None, "ALL") 
    result, data = mail.uid('search', None, '(HEADER Subject "myfancysubject")') 


    ids = data[0] # data is a list. 
    id_list = ids.split() # ids is a space separated string 

    latest_email_id = None 
    if len(id_list) == 1: 
     latest_email_id = id_list[0] # get the latest 
     pass 
    else: 
     latest_email_id = id_list[-1] 
     pass 

    result, data = mail.fetch(latest_email_id, '(RFC822)') # fetch the email body (RFC822) for the given ID 

    print(data) 

    raw_email = data[0][0] 
    email_message = email.message_from_string(raw_email) 

    print email_message['To'] 

    print email.utils.parseaddr(email_message['From']) 

    print email_message.items() # print all headers 

except Exception: 
    print('Ex') 
+0

Не могли бы вы проверить до того, что 'last_email_id' не является None? – fredtantini

+0

last_email_id не является ничем, его «{Str}« 13591 »и изменяет, если я напишу новый – svenhornberg

+0

. Это стоило попробовать ... Не могли бы вы попробовать« альтернативно »в этом [ответе] (http://stackoverflow.com/ а/19545175/3336968)? – fredtantini

ответ

1

Есть решение, Вы должны быть последовательными в использовании UID или последовательный идентификатор

Вместо использования

result, data = mail.fetch(latest_email_id, '(RFC822)') 

мне пришлось использовать :

result, data = mail.uid('fetch', latest_email_id, '(RFC822)') 

Как ранее вы просматривали UID вместо идентификатора последовательности. Затем вы пытались получить RFC822 или тело почты по идентификатору последовательности (по умолчанию).

Вы пытались получить последовательность id x вместо uid x. Эти два варианта отличаются, когда какая-то почта была удалена между ними.

Возможно, это было возможно, потому что почта с этим может быть удалена или что-то в этом роде.

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