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

如何使用exchangelib读取Outlook邮箱子文件夹中的邮件?

解决exchangelib读取Outlook收件箱子文件夹邮件的问题

我之前也踩过类似的坑——用account.inbox.all()读收件箱邮件顺风顺水,但找子文件夹时总卡壳。给你几个亲测有效的方法,应该能搞定你的问题:

方法一:直接路径定位子文件夹

exchangelib支持用/运算符直接定位一级子文件夹,写法超简洁,完全匹配你Inbox ├──myfolder的结构:

# 直接通过收件箱路径获取myfolder
my_folder = account.inbox / 'myfolder'
# 读取该文件夹下的所有邮件
messages = my_folder.all()

你也可以通过children属性访问子文件夹,效果一样:

my_folder = account.inbox.children['myfolder']
messages = my_folder.all()

拿到文件夹后,可以先打印print(my_folder)确认是不是目标文件夹,避免找错。

方法二:递归查找(应对名字不确定/多层嵌套场景)

如果担心文件夹名字大小写不一致,或者未来可能出现多层子文件夹,写个递归函数更稳妥:

from exchangelib import Folder

def find_target_folder(parent_folder, target_name):
    # 遍历当前父文件夹的子文件夹
    for folder in parent_folder.children:
        if folder.name.strip().lower() == target_name.strip().lower():
            return folder
        # 递归查找更深层级的文件夹
        deep_match = find_target_folder(folder, target_name)
        if deep_match:
            return deep_match
    return None

# 调用函数查找myfolder
my_folder = find_target_folder(account.inbox, 'myfolder')
if my_folder:
    print(f"找到目标文件夹:{my_folder.name}")
    messages = my_folder.all()
    # 可以先遍历前5条邮件测试
    for msg in messages[:5]:
        print(msg.subject)
else:
    print("未找到myfolder,请检查文件夹名称是否正确")

常见排查点

如果还是不行,先检查这几个地方:

  • 权限问题:确认你的Exchange账号有访问myfolder的权限,部分子文件夹可能设置了访问限制
  • 名称准确性:仔细核对文件夹名字,有没有空格、特殊字符或者大小写差异(比如实际是MyFolder而非myfolder)
  • 版本兼容性:旧版exchangelib可能有bug,建议更新到最新版:pip install --upgrade exchangelib

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:59:36