2013-03-09 52 views
1

我試圖使用Python IMAP庫將電子郵件設置爲已讀。就像在這個例子中: Python, IMAP and GMail. Mark messages as SEENPython IMAP:無法將電子郵件標記爲

我選擇一個GMail帳戶的「所有電子郵件」文件夾,然後通過搜索命令獲取特定電子郵件的UID。然後我使用該UID嘗試將其標記爲已讀,但失敗。

result, data = mail.uid('fetch', email_uid, '(FLAGS)') 

    print "RESULT: ",result,data 

    mail.select(folder_name, readonly=False) 
    result, data = mail.store(email_uid, '+FLAGS', '\\Seen') 

    print "RESULT OF OPERATION FOR UID",email_uid,result,data 

無論我運行這段代碼多少次,我總是獲得不包含\ Seen標誌的標誌。

樣本執行(忽略Django的打印):

FINAL QUERY: (SENTSINCE 07-Mar-2013 SENTBEFORE 11-Mar-2013 LARGER 7508 SMALLER 7510) 
RESULT: OK ['31424 (UID 54264 FLAGS (NotJunk $NotJunk))'] 
RESULT OF OPERATION FOR UID 54264 OK [None] 

[09/Mar/2013 17:30:37] "GET /api/mark_as_read/320/?token=8e3c057b841b75c864685786b2a9657aadf17e3bfb991b103b7c4b3ffdd2a753&refresh_mode=all&folder_mode=inbox HTTP/1.1" 200 144 
FINAL QUERY: (SENTSINCE 07-Mar-2013 SENTBEFORE 11-Mar-2013 LARGER 7508 SMALLER 7510) 
RESULT: OK ['31424 (UID 54264 FLAGS (NotJunk $NotJunk))'] 
RESULT OF OPERATION FOR UID 54264 OK [None] 

[09/Mar/2013 17:30:44] "GET /api/mark_as_read/320/?token=8e3c057b841b75c864685786b2a9657aadf17e3bfb991b103b7c4b3ffdd2a753&refresh_mode=all&folder_mode=inbox HTTP/1.1" 200 144 
FINAL QUERY: (SENTSINCE 07-Mar-2013 SENTBEFORE 11-Mar-2013 LARGER 7508 SMALLER 7510) 
RESULT: OK ['31424 (UID 54264 FLAGS (NotJunk $NotJunk \\Seen))'] 
RESULT OF OPERATION FOR UID 54264 OK [None] 

我嘗試多種變型。我試圖設置國旗\看到,看到,\看到,SEEN,括號括起來,沒有括號,也不知道我可以嘗試什麼,除此之外。

我懷疑這裏可能有一些非常具體的細節 - 也許GMail的「All email」文件夾不允許將電子郵件標記爲已讀?

我也不知道在mail.store命令中返回的(result,data)元組中,如果數據變量應該具有正常執行的「[None]」變量,或者如果這意味着什麼是錯的。

如果我嘗試設置一個錯誤的標誌,如\\看到mail.store命令引發錯誤。所以當設置\ Seen標誌時,它是一個有效的IMAP標誌。

我不知道接下來要做什麼。

任何幫助將非常appreiated。

+0

'RESULT:OK ['31424(UID 54264 FLAGS(NotJunk $ NotJunk \\ Seen))']'這是否表明Seen標誌已設置? – Max 2013-03-10 00:33:49

+0

你是對的,在這種情況下,它確實標記了所看到的電子郵件,但它並不總是按照預期行事。印刷品非常不規則。 – 2013-03-10 01:33:28

+0

我不知道你的代碼是否正常工作,但我昨天試圖通過UID設置一個FLAG時遇到了這個問題。我使用它的唯一方法是通過順序ID設置它。無論如何,讓我們知道如果你得到它的工作謝謝! – 2013-03-21 06:13:08

回答

0

IMAP specification for the STORE command沒有通過UID設置標誌的選項。您只能通過message set來設置它們(如在您鏈接的示例中)。
它工作的唯一原因有時是您的UID和消息集的序列相對接近(31424 vs 54264)。

RESULT: OK ['31424 (UID 54264 FLAGS (NotJunk $NotJunk))'] 

您可以通過UID是不實際曾經設置標誌,你被message set ...偶爾相當於UID設置它們。


可以通過UID組標誌(然而只是不與STORE命令)。 (使用示例)

result, data = mail.uid('store', '542648', '+FLAGS', '(\\Seen)') 

如果成功的話,服務器會與您所使用的-eg UID的message set迴應::可以發出的第一個參數是store設置標誌的UID Command

OK ['31424 (FLAGS (\\Seen))']