0

我正在尝试使用特定日期范围以及其他条件(发件人、主题等)从 Outlook 读取电子邮件。但是,我不确定如何指定 Python 可以搜索电子邮件的日期范围。到目前为止,这就是我所拥有的,它会产生以下类型错误:

if subject in message.subject and date in message.senton.date():
TypeError: argument of type 'datetime.date' is not iterable
import win32com.client
import datetime


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

inbox = outlook.GetDefaultFolder(18).Folders.Item("xxxxx")
messages = inbox.Items
date = datetime.date.today()


subject = "xxxxxxx"

for message in messages:
    if subject in message.subject and date in message.senton.date():
     print(message.senton.time())

我想搜索特定日期范围内的电子邮件,并且能够使用多个条件进行搜索。例如指定主题以及发件人等。但我不确定如何,我是 Python 新手,所以请帮忙!

4

2 回答 2

1

Outlook 提供了一个 api 来查询确切的主题,而不是遍历每条消息:

import win32com.client
    
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
inbox=outlook.Folders.Item(3).Folders['Inbox'].Folders['My Folder']
filt = "@SQL=""http://schemas.microsoft.com/mapi/proptag/0x0037001f"" = '{0}'".format(subject)
messages=inbox.Items.Restrict(filt)
于 2021-06-25T18:12:06.340 回答
1

尝试这个

if subject in message.subject and date == message.senton.date():
     print(message.senton.time())
     print(message.sender)

编辑:如果你想要日期范围,你可以使用 datetime 来定义日期范围

start = message.senton.date() - timedelta(days=10)
end = message.senton.date() + datetime.timedelta(days=10) # 20 days date range
if subject in message.subject and date > start and date < end:
     print(message.senton.time())
     print(message.sender)
于 2019-05-10T10:21:39.223 回答