我无法从Sent
文件夹中删除电子邮件。从Inbox
文件夹中删除效果很好。我尝试使用Sent
和[Gmail]/Sent
参数,但是它不起作用。可能是哪里出了问题?
import imaplib
email = "[email protected]"
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
该代码不处理错误。这就是为什么它无法将服务器的tagged NO
response捕获到NO
命令的原因。这在错误日志中也不可见,但是您报告的异常意味着到代码发布SELECT
时,没有打开邮箱-这意味着SEARCH
必须失败。 (检查SELECT
。)
GMail使用本地化的邮箱名称,因此可能的罪魁祸首是您要进行身份验证的用户没有名为IMAP protocol states的邮箱。如果需要发现“已发送文件夹”邮箱名称,请尝试[Gmail]/Sent
(或参阅RFC 6154)。