我有一大堆的邮件中略有错位的头一个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