无法用imaplib删除messege

时间:2016-10-27 15:04:53

标签: python gmail-imap imaplib

我使用此代码从我的电子邮件中删除了一条消息:

mail.store(id, '+FLAGS', '\\Deleted')
mail.expunge()

此代码返回' Ok'。

  

(' OK',[无])

我还将我的Gmail帐号中的设置更改为:

Settings of my imap using with gmail

但我仍然无法删除消息。为什么?

2 个答案:

答案 0 :(得分:3)

您正在混合'消息序列号'(MSN,您称之为'假ids')和'唯一ID'(UID,您称之为'真实ID')。

在任何地方使用UID都比较方便。 MSN和UID版本中都有一些命令:FETCH与UID FETCH,SEARCH与UID SEARCH,STORE与UID STORE。你必须保持一致,但他们的工作方式相同。

因此,如果您使用UID SEARCH,则应使用UID STORE:

email.uid('STORE', id, '+FLAGS', '(\\Deleted)')
email.expunge()

关于Gmail上的删除,特别是:尽管用户设置了删除,但我发现它总是只删除“收件箱”标签(或您碰巧在的任何文件夹中),这会将其保存在“所有邮件”文件夹中或同等学历。要真的删除它,您可能需要:

  • 将其移至用户“废纸篓”文件夹(使用(UID) MOVE,或(UID) COPY和删除的组合。
  • 然后从用户的“废纸篓”文件夹中删除它。大多数用户会发现将其保留在“废纸篓”中是可以接受的,直到它在30天内自动删除为止。

答案 1 :(得分:0)

我解决了我的问题,但又得到了另一个问题,如果有人用另一个答案回答这个问题,我会很高兴问题出现了:) 当我搜索要删除的messege的id时,我搜索了函数'uid'并得到了真正的uid(例如,如果我有500个messeges并删除所有这些,那么下一个我得到的,将是501 ,即使我的收件箱中只有一个信息。) 所以不要使用:

email.uids('search', 'ALL')

我用过:

email.search(None, 'ALL')

当我删除messege时,我需要使用非真实的id。所以例如,501 messege将是1“假身份证”(或真实......看看你想看到它。),下一个将是2等等......

所以,我没有删除501 messege id,而是为1个messege id做了。

但是,问题出现了: 为什么在获取messeges之间存在差异(然后我将必须使用'real id')并删除它们(然后我必须使用'not real id'。)