Pywin32 Outlook限制函数已停止工作

2024-04-18 02:14:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在使用下面的代码片段来抓取在过去3小时内收到的某个子文件夹中的每封电子邮件,并在处理之前从中提取一些业务信息,并且它已经工作了一周左右。然而,由于某种原因,昨天我注意到它工作不正常,当我添加一个打印声明以查看向流程功能发送了哪些电子邮件时,我注意到它从3月到现在发送了所有邮件(超过1000封电子邮件)

        outlook = Dispatch("Outlook.Application").GetNamespace("MAPI")
        api_folder = outlook.Folders.Item(1).Folders['Some Folder']

        start = datetime.datetime.now() - datetime.timedelta(hours=3)

        # 05/01/2020 05:23 AM is this the right format?

        start = start.strftime('%m/%d/%Y %H:%M %p')

        messages = api_folder.Items.Restrict("[ReceivedTime] >= '" + start + "'")

        # This prints emails that shouldnt be here after Restrict()
        for msg in messages:
            print(f"{msg.Subject} - {msg.ReceivedTime}")

我敢肯定,在调用Restrict的方式上,或者在时间格式上,这可能是一个非常愚蠢的错误,但由于我是编程新手,我一直无法找到导致函数行为异常的根本原因

非常感谢您的帮助

谢谢


Tags: 代码文件夹api信息datetimemsg业务folder
1条回答
网友
1楼 · 发布于 2024-04-18 02:14:18

尽管日期和时间通常以Date格式存储,但是FindRestrict方法要求将日期和时间转换为字符串表示形式。要确保日期的格式符合Microsoft Outlook的要求,请使用strftime(或VBA中的Format)函数。并确保Outlook理解它:

api_folder.Items.Restrict("urn:schemas:httpmail:datereceived" >= '9/15/2019 12:00 AM')

注意,您可以在Outlook中手动配置所需的筛选器,以获取字符串表示形式并在代码中使用它

相关问题 更多 >