我的Python代码运行,但不';t从Gmail收件箱中删除选定的电子邮件

我的Python代码运行,但不';t从Gmail收件箱中删除选定的电子邮件,python,gmail,imap,Python,Gmail,Imap,下面的Python代码运行,但不会删除我希望从test gamil\inbox中删除的选定电子邮件。我不确定我到底做错了什么。我真的很感激任何帮助 import imaplib import datetime m = imaplib.IMAP4_SSL("imap.gmail.com") # server to connect to print("{0} Connecting to mailbox via IMAP...".format(dateti

下面的Python代码运行,但不会删除我希望从test gamil\inbox中删除的选定电子邮件。我不确定我到底做错了什么。我真的很感激任何帮助

import imaplib
import datetime


m = imaplib.IMAP4_SSL("imap.gmail.com")  # server to connect to
print("{0} Connecting to mailbox via IMAP...".format(datetime.datetime.today().strftime("%Y-%m-%d %H:%M:%S")))
m.login('bb_xxxxx@gmail.com', 'gmail_pass')
 
print("{0} Searching Inbox by sender...".format(datetime.datetime.today().strftime("%Y-%m-%d %H:%M:%S")))
m.select('Inbox') #select folder to search
status, messages = m.search(None, 'FROM "location-history-noreply@google.com"') # search for specific mails by sender

print("{0} Flagging selected mail as deleted...".format(datetime.datetime.today().strftime("%Y-%m-%d %H:%M:%S")))
for mail in messages[0].split():
    m.store(mail, "+FLAGS", "\\Deleted")
    m.expunge()
        
print("{0} Done. Closing connection & logging out.".format(datetime.datetime.today().strftime("%Y-%m-%d %H:%M:%S")))
m.close()
m.logout()

在退出for循环之前,不要运行expunge
expunge
对邮件ID重新编号,这样您从搜索中获得的数字就不再对应

因此:

这就是为什么它是一个单独的操作的原因之一。或者到处使用UID


此外,在gmail上,删除实际上并不删除邮件。它仅将其标记为已从该标签(收件箱)中删除。如果你真的想删除它,你需要将它移动到垃圾箱文件夹,然后从那里删除它。

非常感谢Max!你的回答帮助我解决了问题。但是,如果我使用“\Deleted”,则我会看到邮件从收件箱中删除,但在“All Mail”文件夹中仍然可用。这是否意味着它们将被永久删除?因此,我尝试使用如下移动到“垃圾箱”,现在邮件从收件箱中删除,但移动到“垃圾箱”


Gmail并不是真正的IMAP服务器。向文件夹中的邮件添加\删除时,仅删除该标签。它将保留在“所有邮件”(如存档)中,除非您专门将其移动到垃圾箱中。从那里,你可以等待它自己删除,自己清空它,或者尝试在设置中配置Gmail删除选项。
for mail in messages[0].split():
    m.store(mail, "+FLAGS", "\\Deleted")
m.expunge()
for mail in messages[0].split():
    #m.store(mail, "+FLAGS", "\\Deleted")
    m.store(mail, '+X-GM-LABELS', '\\Trash')
m.expunge()