我正在尝试使用特定日期范围以及其他条件(发件人,主题等)从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的新手,请帮忙!
答案 0 :(得分: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)
答案 1 :(得分: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)