Imaplib:如何从Gmail删除邮件?

9 投票
1 回答
3184 浏览
提问于 2025-04-15 23:48

我正在尝试做一件很简单的事情,就是用Python的imaplib把一封邮件从收件箱移动到垃圾箱。不过,我遇到了一些问题,不知道怎么解决。

在连接并登录到服务器后,我选择了收件箱,然后这样获取了邮件的ID列表:

typ, ids = imap_object.search(None, 'INBOX')
ids_list = ids[0].split()

假设我从中选了一个ID,叫做X,并且假设这封邮件是某个对话的一部分。当我执行

imap_object.fetch (X, '(RFC822)')[1]

时,我能看到这条消息,正如我预期的那样,但当我执行

imap.store(X, '+FLAGS', r'(\Deleted)')

时,它却删除了整个对话,而不仅仅是这条消息!而且,我并不想完全删除这封邮件,我只是想把它移到垃圾箱,所以我尝试了:

imap.copy(X, '[Gmail]/Papelera')
imap.store(X, '+FLAGS', r'(\Deleted)')
imap.expunge()

但这样只把这条消息复制到了垃圾箱,然后又删除了整个对话,这样我就丢失了邮件!

问题:我该如何使用imaplib从Gmail中删除一封邮件,而不删除整个对话呢?

1 个回答

2

我觉得你的对话其实并没有被真正删除:默认情况下,通过IMAP删除一条消息时,它会把这条对话存档到最后一个文件夹里。你可以去设置里看看,路径是设置 -> 转发和POP/IMAP -> 当一条消息被标记为删除并从最后一个可见的IMAP文件夹中清除时:

撰写回答