imap从已发送的文件夹中删除电子邮件



我无法从Sent文件夹中删除电子邮件。它可以很好地从Inbox文件夹中删除。我尝试使用Sent[Gmail]/Sent参数,但都不起作用。问题出在哪里?

import imaplib
email = "my@gmail.com"
passw = "mypass"
imapserver = "imap.gmail.com"

def deleteEmailIMAP(user, password, IMAP):
mail = imaplib.IMAP4_SSL(IMAP)
mail.login(user, password)
mail.select("[Gmail]/Sent")
typ, data = mail.search(None, 'subject 2f0802e2-e396-4a37-aeae-3a51b6ad288f')
for num in data[0].split():
mail.store(num, '+FLAGS', r'(Deleted)')
mail.expunge()
mail.close()
mail.logout()

deleteEmailIMAP(email, passw, imapserver)

日志:

Traceback (most recent call last):
File "/Users/nikolai/Documents/Python/gmail/test/cv.py", line 23, in <module>
deleteEmailIMAP(email, passw, imapserver)
File "/Users/nikolai/Documents/Python/gmail/test/cv.py", line 15, in deleteEmailIMAP
typ, data = mail.search(None, 'subject 2f0802e2-e396-4a37-aeae-3a51b6ad288f')
File "/usr/local/Cellar/python/3.7.5/Frameworks/Python.framework/Versions/3.7/lib/python3.7/imaplib.py", line 723, in search
typ, dat = self._simple_command(name, *criteria)
File "/usr/local/Cellar/python/3.7.5/Frameworks/Python.framework/Versions/3.7/lib/python3.7/imaplib.py", line 1196, in _simple_command
return self._command_complete(name, self._command(name, *args))
File "/usr/local/Cellar/python/3.7.5/Frameworks/Python.framework/Versions/3.7/lib/python3.7/imaplib.py", line 944, in _command
', '.join(Commands[name])))
imaplib.error: command SEARCH illegal in state AUTH, only allowed in states SELECTED

该代码不处理错误。这就是为什么它不会捕获服务器对SELECT命令的标记NO响应。它在错误日志中也不可见,但您报告的异常意味着,当代码发出SEARCH时,没有打开任何邮箱,这意味着SELECT一定失败了。(检查IMAP协议状态。(

GMail使用本地化的邮箱名称,因此可能的罪魁祸首是您身份验证的用户没有名为[Gmail]/Sent的邮箱。如果您需要发现";已发送文件夹";邮箱名称,请尝试RFC 6154(或参阅谷歌的文档(。

最新更新