2012-07-21 91 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] /垃圾箱“标签,然后选择垃圾标签并删除/清除那里的所有内容。这会永久删除该消息。