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

使用Python提取Outlook指定文件夹邮件接收日期时输出重复如何解决

问题根因
  • 变量名不匹配:你将目标子文件夹对象赋值给了pega变量,后续读取邮件列表时误用了未定义的InboxSubfolder,如果你代码能正常运行,说明之前调试时给InboxSubfolder赋值过固定的单封邮件对象,导致一直读取同一封邮件的信息。
  • 属性未随遍历更新:received_date仅在循环外读取了第一封邮件的接收时间,循环内始终打印这个固定值,没有随着遍历新邮件更新属性。
修正后代码
import win32com.client
import os 
from datetime import datetime, timedelta, date

outlook = win32com.client.Dispatch("Outlook.Application").GetNameSpace("MAPI")
mailbox = outlook.Folders.Item("$OutlookMailbox")
inbox = mailbox.Folders.Item("Inbox")
# 目标子文件夹对象赋值给pega,后续统一用这个变量
pega = inbox.Folders.Item("InboxSubfolder")

# 读取子文件夹下所有邮件,可加排序方便后续筛选,这里按接收时间降序排列
messages = pega.Items
messages.Sort("[ReceivedTime]", True) # 第二个参数True为降序,False为升序

# 遍历所有邮件,每次读取当前邮件的接收时间
for message in messages:
    # 避免遍历到日历、会议邀请等非邮件对象报错,可加类型判断
    if message.Class == 43: # 43对应Outlook邮件类型常量olMail
        received_date = message.ReceivedTime
        print(received_date)
        # 也可以在这里直接做日期筛选,比如只取近7天的邮件
        # if received_date >= datetime.now() - timedelta(days=7):
        #     print(received_date, message.Subject)
额外注意事项
  • 遍历的时候建议增加message.Class == 43的判断,避免子文件夹内存在会议邀请、日历提醒等非邮件对象时抛出属性不存在的错误。
  • 如果文件夹内邮件数量较多,可直接使用Outlook的Restrict方法提前筛选目标日期范围的邮件,不需要全量遍历,效率更高,示例写法:messages = pega.Items.Restrict("[ReceivedTime] >= '2024-01-01'"),日期格式需要符合Outlook的要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:36:03