无法使用 imaplib 删除邮件
Can't delete messege with imaplib
我使用此代码从我的电子邮件中删除一条消息:
mail.store(id, '+FLAGS', '\Deleted')
mail.expunge()
而这个代码是 return 'Ok'.
('OK', [None])
我还将我的 gmail 帐户中的设置更改为:
但是我还是删除不了消息。为什么会这样?
我解决了我的问题,但遇到了另一个问题,如果有人用另一个答案回答这个问题,我会很高兴 :)
当我搜索要删除的消息的 id 时,我使用函数 'uid' 进行搜索并获得了真实的 uid(例如,如果我有 500 条消息并将其全部删除,那么我得到的下一个消息将是 501,即使我的收件箱中只有一封邮件。)。
所以不要使用:
email.uids('search', 'ALL')
我用过:
email.search(None, 'ALL')
当我删除消息时,我需要使用非真实ID。因此,例如,501 消息将是其中的 1 "fake id"(或真实的..以您想要的方式查看它。)下一个将是 2,等等...
所以,我没有删除 501 消息 ID,而是删除了 1 消息 ID。
但是,问题来了:
为什么获取消息(然后我将必须使用 'real id')和删除它们(然后我将必须使用 'not real id'。)
之间存在差异
您正在混合使用 'message sequence numbers'(MSN,您所谓的 'fake ids')和 'unique ids'(UID,您所称的 'real ids')。
到处使用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 上的删除,特别是:尽管用户设置了删除,但我发现它总是只是删除了 'Inbox' 标签(或您恰好位于其中的任何文件夹),这将保留它存档于您的“所有邮件”文件夹或同等文件夹。要真正删除它,您可能需要:
- 将其移至用户的回收站文件夹(使用
(UID) MOVE
,或 (UID) COPY
和删除的组合。
- 然后将其从用户的回收站文件夹中删除。大多数用户会发现将它留在垃圾箱中直到它在 30 天内自动删除是可以接受的。
我使用此代码从我的电子邮件中删除一条消息:
mail.store(id, '+FLAGS', '\Deleted')
mail.expunge()
而这个代码是 return 'Ok'.
('OK', [None])
我还将我的 gmail 帐户中的设置更改为:
但是我还是删除不了消息。为什么会这样?
我解决了我的问题,但遇到了另一个问题,如果有人用另一个答案回答这个问题,我会很高兴 :) 当我搜索要删除的消息的 id 时,我使用函数 'uid' 进行搜索并获得了真实的 uid(例如,如果我有 500 条消息并将其全部删除,那么我得到的下一个消息将是 501,即使我的收件箱中只有一封邮件。)。 所以不要使用:
email.uids('search', 'ALL')
我用过:
email.search(None, 'ALL')
当我删除消息时,我需要使用非真实ID。因此,例如,501 消息将是其中的 1 "fake id"(或真实的..以您想要的方式查看它。)下一个将是 2,等等...
所以,我没有删除 501 消息 ID,而是删除了 1 消息 ID。
但是,问题来了: 为什么获取消息(然后我将必须使用 'real id')和删除它们(然后我将必须使用 'not real id'。)
之间存在差异您正在混合使用 'message sequence numbers'(MSN,您所谓的 'fake ids')和 'unique ids'(UID,您所称的 'real ids')。
到处使用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 上的删除,特别是:尽管用户设置了删除,但我发现它总是只是删除了 'Inbox' 标签(或您恰好位于其中的任何文件夹),这将保留它存档于您的“所有邮件”文件夹或同等文件夹。要真正删除它,您可能需要:
- 将其移至用户的回收站文件夹(使用
(UID) MOVE
,或(UID) COPY
和删除的组合。 - 然后将其从用户的回收站文件夹中删除。大多数用户会发现将它留在垃圾箱中直到它在 30 天内自动删除是可以接受的。