我有一大堆的郵件中略有錯位的頭一個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資料夾刪除標記的消息:立即永久刪除了郵件
檢查http://stackoverflow.com/questions/3988583/problem-deleting-emails-in-gmail-using-imaplib,看看有沒有什麼幫助 – 2012-07-21 10:07:42
我沒有看到這個問題,當我搜索前一個答案,並確保檢查我的高級imap設置(因爲提升爲常規gmail的一部分,而不僅僅是實驗室)。默認情況下是將消息歸檔到imap刪除請求上。可以將其更改爲垃圾標籤或「立即刪除該郵件」。我已經設置了後者。 – 2012-07-21 11:13:39
Rightio然後 - 我不知所措 - 但我打賭有一些怪癖與Gmail是在做它 – 2012-07-21 11:20:08