如何使用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_
相关产品推荐
相关产品推荐

