You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

imapclient读取Office365已发送邮件报FETCH命令错误10如何解决?

问题解决方法

1. 代码逻辑错误(直接触发报错的核心原因)

你当前代码的循环逻辑存在严重冗余错误:在遍历单个UID的for i in UIDs循环中,每次调用imapObj.fetch()都传入了完整的UIDs全量ID列表,而非当前遍历的单个i。当已发送文件夹邮件数量较多时,单次请求数据量超过Office365 IMAP接口限制,就会直接返回BAD错误。

修正后的逻辑参考:

import imapclient, pprint , pyzmail ,re
import socket

out = {}

socket.getaddrinfo('127.0.0.1', 8080)

imapObj = imapclient.IMAPClient('outlook.office365.com', ssl=True)
imapObj.login('email', 'pass')
# 先确认已发送文件夹的正确名称再填入
imapObj.select_folder('Sent Items', readonly=True)

UIDs = imapObj.search(['ALL'])
# 一次性批量拉取所有邮件,不要在循环中重复调用fetch
data = imapObj.fetch(UIDs, ['BODY[]'])
for i in UIDs:
    message = pyzmail.PyzMessage.factory(data[i][b'BODY[]'])
    header = str(message.get_subject())
    print(header)

如果已发送文件夹邮件量超过1000封,建议拆分UID列表分批拉取,每次拉取200-500封即可。

2. 已发送文件夹名称校验

Office365的邮箱文件夹名称会根据账户语言设置、企业自定义配置变化,并不一定固定为Sent Items,你可以取消代码中list_folders()的注释,打印所有文件夹的实际名称,确认已发送文件夹的正确命名后再传入select_folder方法。

补充优化项

  • 操作已发送文件夹时建议开启readonly模式,避免误操作修改邮件状态
  • Office365已逐步禁用基础密码认证的IMAP权限,如果后续出现登录报错,可以优先检查账户的IMAP权限和认证方式配置,建议优先使用OAuth2认证。

内容的提问来源于stack exchange,提问作者Alani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 09:03:03