2012-07-21 89 views
1

我有一大堆的郵件中略有錯位的頭一個Gmail郵箱。我想使用python和gmail的imap界面自動處理和更新它們。我想下載郵件,在本地修改標題,然後在服務器上刪除它,然後添加固定的郵件。問題是,雖然消息似乎被正確刪除,但在將舊消息添加回來之後,仍然存在錯誤的消息頭。更加嚴重的是,如果我手動刪除該郵件在Gmail中,然後與蟒蛇相同的命令添加消息,根據需要新的,好的標題出現。刪除和追加更新的消息仍顯示舊消息

>>> import imaplib 
>>> import email 
>>> mail = imaplib.IMAP4_SSL('imap.gmail.com') 
>>> mail.login('[email protected]', 'password') 
>>> mail.select('label') 
('OK', ['2']) 
>>> mail.search(None, 'from', 'bad_string') 
('OK', ['2']) 
>>> ret,data = mail.fetch('2', '(RFC822)') 
>>> msg = email.message_from_string(data1[0][1]) 
>>> msg['from'] 
'"Doe, John" <[email protected]_string.com>' 
>>> new = msg['from'].replace('bad_string', 'good_string') 
>>> msg.replace_header('From', new) 
>>> msg['from'] 
'"Doe, John" <[email protected]_string.com>' 
>>> mail.store('2', '+FLAGS', '\\Deleted') 
('OK', ['2 (FLAGS (\\Seen \\Deleted))']) 
>>> mail.expunge() 
('OK', ['2']) 
>>> mail.search(None, 'from', 'bad_string') 
('OK', ['']) 
>>> mail.select('label') 
('OK', ['1']) 

在這一點上,它似乎像python看到電子郵件被刪除。檢查Gmail的Web界面似乎也顯示它已經消失。在標籤中只有一個電子郵件,而不是開始時的兩個電子郵件,搜索返回空白。

>>> mail.append('label', None, '"20-Jul-2012 22:30:00 -0400"', str(msg)) 
('OK', ['[APPENDUID 24 13] (Success)']) 
>>> mail.search(None, 'from', 'bad_string') 
('OK', ['2']) 
>>> mail.search(None, 'from', 'good_string') 
('OK', ['']) 

但是該消息回來了,它的原始壞字符串。然而,如果不是編程方式將其標記爲刪除和清除,我刪除並清空回收站在Gmail的Web界面,然後追加(仍然在同蟒蛇會議如上因此運行上面的輸出在此之後右)...

>>> mail.append('label', None, '"20-Jul-2012 22:30:00 -0400"', str(msg)) 
('OK', ['[APPENDUID 24 14] (Success)']) 
>>> mail.search(None, 'from', 'bad_string') 
('OK', ['']) 
>>> mail.search(None, 'from', 'good_string') 
('OK', ['2']) 

Gmail的IMAP設置如下:

  • 當我標記爲刪除的IMAP消息:自動清除 - 等待客戶端更新服務器。
  • 當用作刪除,而從最後IMAP資料夾刪除標記的消息:立即永久刪除了郵件
+0

檢查http://stackoverflow.com/questions/3988583/problem-deleting-emails-in-gmail-using-imaplib,看看有沒有什麼幫助 – 2012-07-21 10:07:42

+0

我沒有看到這個問題,當我搜索前一個答案,並確保檢查我的高級imap設置(因爲提升爲常規gmail的一部分,而不僅僅是實驗室)。默認情況下是將消息歸檔到imap刪除請求上。可以將其更改爲垃圾標籤或「立即刪除該郵件」。我已經設置了後者。 – 2012-07-21 11:13:39

+0

Rightio然後 - 我不知所措 - 但我打賭有一些怪癖與Gmail是在做它 – 2012-07-21 11:20:08

回答

0

這樣的答案當然uncloaks張貼的問題後不久...的顯著細節是線「當爲已刪除,並從最後顯示的IMAP文件夾擦去被標記的消息」。默認情況下,所有郵件被選爲可見的IMAP文件夾,因此郵件將始終在至少一個文件夾中可見。我相信有兩種解決方案:

  1. 取消選擇所有郵件作爲可見的IMAP文件夾。那麼「當被標記的消息...」選項表現爲我會把它已初步預期刪除和從標籤中清除日期時。如果選擇「歸檔郵件」,則只會刪除標籤,並且它在所有郵件中仍可見。如果選擇「將郵件移至廢紙簍」,郵件將移至廢紙簍標籤。如果選擇「永久永久刪除」,則該消息將被完全刪除。

  2. 將所有默認文件夾選爲可見的IMAP文件夾和默認IMAP設置,而不是對其當前標籤中的消息執行任何操作,而是將消息複製到「[Gmail] /垃圾箱「標籤,然後選擇垃圾標籤並刪除/清除那裏的所有內容。這會永久刪除該消息。