使用imaplib删除Yahoo邮件遇权限错误:STORE失败-邮箱只读
解决Yahoo邮箱IMAP删除邮件的只读权限错误
问题根源
你的代码有两个关键问题导致了只读错误:
- 重复创建了两个IMAP连接(
imap和con),逻辑混乱且完全没必要 - 错误使用
imap.select方法:你把搜索条件"(UNSEEN)"当成了第二个参数,但select的第二个参数实际是**readonly布尔值**(默认True),这直接让邮箱切换成了只读模式,后续的STORE操作自然失败
修复后的代码
import imaplib import email # 配置信息 email_address = "你的邮箱地址" password = "你的应用专用密码(Yahoo需用此替代普通密码)" imap_server = "imap.mail.yahoo.com" # 只创建一个IMAP连接 imap = imaplib.IMAP4_SSL(imap_server, 993) imap.login(email_address, password) # 以可写模式打开"Learn"文件夹 imap.select("Learn", readonly=False) # 单独搜索未读邮件(用search方法而非把条件塞给select) typ, data = imap.search(None, "UNSEEN") # 遍历搜索到的邮件编号 for num in data[0].split(): # 获取邮件内容 typ, msg_data = imap.fetch(num, '(RFC822)') for response_part in msg_data: if isinstance(response_part, tuple): msg = email.message_from_bytes(response_part[1]) print('%-8s: %s' % ('FROM', msg['from'])) # 标记邮件为待删除 imap.store(num, "+FLAGS", "\\Deleted") # 执行永久删除操作 imap.expunge() # 关闭文件夹并登出 imap.close() imap.logout()
额外注意事项
- Yahoo邮箱IMAP需要使用应用专用密码,而非普通登录密码,需先在Yahoo账户安全中心开启两步验证后生成
- 无需重复创建IMAP连接,单个连接即可完成所有操作
- 筛选邮件请使用
imap.search()方法,select()仅用于打开指定邮箱文件夹
内容的提问来源于stack exchange,提问作者Andy D
相关产品推荐
相关产品推荐

