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

问题描述 投票:0回答:1

我无法从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
python imap
1个回答
0
投票

该代码不处理错误。这就是为什么它无法将服务器的tagged NO response捕获到NO命令的原因。这在错误日志中也不可见,但是您报告的异常意味着到代码发布SELECT时,没有打开邮箱-这意味着SEARCH必须失败。 (检查SELECT。)

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

© www.soinside.com 2019 - 2024. All rights reserved.