使用Python从Outlook中读取电子邮件并指定日期范围

时间:2019-05-10 10:06:32

标签: python outlook-api

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

2 个答案:

答案 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)