2012-11-20 76 views
1

我正在使用imaplib和Python來獲取我的收件箱或GMail標籤的內容。Python GMail IMAP不返回UID

我的問題是:當我查詢收件箱時,imaplib返回UID,但不是我的電子郵件標籤。

如果我查詢收件箱中,我得到的UID:

inbox EMAIL_UIDS: 24408 24599 25193 25224 25237 25406 25411 25412 25413 25415 

但是,如果我詢問我的標籤「新建」(其中包含兩個在收件箱中的郵件,因此應包含兩個以上的UID) ,我只得到了有序索引:

New EMAIL_UIDS: 1 2 

我的代碼是:

#Main file 
if folder_name is None: 
    email_uids = obtain_inbox_email_uids(mail) 
else: 
    email_uids = obtain_folder_email_uids(folder_name,mail) 
email_uids = list(email_uids) 

和:

#Email utilities file 
def obtain_folder_email_uids(folder_name, mail): 
    """ 
    Given an IMAP instance, 
    return the UIDs of the emails in a specific folder. 
    """ 

    mail.select(folder_name) 

    result, data = mail.uid('search', None, "ALL") 
    print "RESULT, DATA",result,data 
    email_uids = data[0] 

    print folder_name,"EMAIL_UIDS:",email_uids 
    email_uids = email_uids.split(" ") 
    email_uids = reversed(email_uids) 

    return email_uids 

def obtain_inbox_email_uids(mail): 
    """ 
    Given an IMAP instance, 
    return the UIDs of the inbox emails. 
    """ 

    return obtain_folder_email_uids('inbox', mail) 

有沒有人知道爲什麼imaplib會爲收件箱返回UID但爲特定標籤訂購索引,以及如何獲取它以返回UID?

謝謝

回答

4

發現問題。 UID正確返回。

我的問題是:我正在使用一個函數來根據其UID手動獲取電子郵件。因此,在收件箱的情況下,我獲得了UID,然後使用此功能獲取每個特定的郵件。每個標籤都一樣。

但是,每個特定電子郵件都是爲收件箱返回的,但在標籤的情況下,我無法獲取每封郵件。因此,我認爲我沒有將正確的UID傳遞給函數。

我的錯誤是無關的。在獲取特定郵件的函數內部,不是從相關標籤中獲取郵件,而是始終從收件箱中提取郵件。

因此,在這種情況下,對於收件箱,我將獲得UID列表,然後使用此函數成功獲取每個特定的郵件,但是在特定GMail標籤的情況下,我將獲得UID列表,然後無法獲取每個特定郵件,因爲我正在收件箱中執行選擇。

將選擇從收件箱更改爲獲取每個特定郵件的函數內的特定標籤,現在完美無缺。

+0

我知道對不對?爲什麼在整個賬戶中UID不是唯一的? – Xeoncross

2

IMAP的UID是每個郵箱獨特如果您剛創建郵箱,那麼1和2幾乎肯定是這兩條消息的正確UID。你爲什麼認爲他們不是?

+0

感謝您的快速回復。找出錯誤併發布回覆。 –