首页 > 解决方案 > python win32com.client Outlook 应用程序未过滤收到的电子邮件

问题描述

我编写了如下代码,但它没有做时间过滤器。我究竟做错了什么?

import win32com.client
import os
from datetime import datetime, timedelta

outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")

# setup range for outlook to search emails (so we don't go through the entire inbox)
    
received_dt = datetime.now() - timedelta(days=1)
received_dt = received_dt.strftime('%m/%d/%Y %H:%M %p')

# Select main Inbox
inbox = outlook.Folders("example@mydomain.com").Folders("Inboxx")
messages = inbox.Items.Restrict("[ReceivedTime] >= '" + received_dt + "'")


for message in messages:
    print(str(message.ReceivedTime))

我正在粘贴下面代码的输出。

2021-07-05 19:56:03.826000+00:00
2021-09-21 23:13:31.429000+00:00
2021-09-26 22:15:13.527000+00:00
2021-10-03 12:45:04.919000+00:00
2021-10-03 19:43:05.916000+00:00
2021-10-03 20:40:05.875000+00:00

你能帮我吗?

标签: pythonoutlookwin32comoutlook-api

解决方案


在调用 Restrict 方法之前尝试计算日期和时间字符串:

import win32com.client
import os
from datetime import datetime, timedelta

outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")

# setup range for outlook to search emails (so we don't go through the entire inbox)
lastWeekDateTime = dt.datetime.now() - dt.timedelta(days= 7)
lastWeekDateTime = lastWeekDateTime.strftime('%Y-%m-%d %H:%M')  #<-- This format compatible with "Restrict"

received_dt = datetime.now() - timedelta(days=1)
received_dt = received_dt.strftime('%m/%d/%Y %H:%M %p')

# Select main Inbox
inbox = outlook.Folders("example@mydomain.com").Folders("Inboxx")
messages = inbox.Items.Restrict("[ReceivedTime] >= '" + received_dt + "'")

for message in messages:
    print(str(message.ReceivedTime))

在如何:使用限制方法从文件夹文章中检索 Outlook 邮件项目中阅读有关该Restrict方法的更多信息。


推荐阅读