在过去的一个小时里,我正试图从outlook中读取电子邮件。我使用了以下代码。这里我没有得到任何错误,但它没有给我任何输出。
import win32com.client
import datetime as dt
import pandas as pd
date_time = dt.datetime.now()
lastHourDateTime = dt.datetime.now() - dt.timedelta(minutes=60)
outlook = win32com.client.Dispatch("Outlook.Application").GetNameSpace("MAPI")
inbox = outlook.GetDefaultFolder(6)
messages = inbox.Items
messages.Sort("[ReceivedTime]", True)
message = messages.GetLast()
lastHourMessages = messages.Restrict("[ReceivedTime] >= '" + lastHourDateTime.strftime('%m/%d/%Y %H:%M %p') + "'")
timeStamp = dt.datetime.now().strftime("%d-%m-%Y_%H.%M.%S")
for lastHourMessage in lastHourMessages:
print(lastHourMessage.subject)
我查看了len(messages)
,它给了我收件箱邮件的总数。而CCD_ 2显示为0。
据我说,Restrict
功能无法正常工作。有人能帮我吗?
在下面的行中将%y
更改为%Y
。
lastHourMessages = messages.Restrict("[ReceivedTime] >= '" + lastHourDateTime.strftime('%m/%d/%y %H:%M %p') + "'")
可以肯定的是,是正确的
lastHourMessages = messages.Restrict("[ReceivedTime] >= '" + lastHourDateTime.strftime('%m/%d/%Y %H:%M %p') + "'")
更新#1
我在你的代码中添加了一些调试信息,以帮助理解出了什么问题
请尝试使用下面的代码。希望它能帮助你。
import win32com.client
import datetime as dt
one_hour_before = dt.datetime.now() - dt.timedelta(minutes=60)
print(f'one_hour_before: {one_hour_before.astimezone()}')
# Get Outlook NameSpace object.
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
# Get The Inbox folder.
# Other folder types:
# https://learn.microsoft.com/en-us/office/vba/api/outlook.oldefaultfolders
inbox_folder = outlook.GetDefaultFolder(6)
print(f'{inbox_folder}n')
# Get collection of Outlook items and sort.
messages = inbox_folder.Items
messages.Sort("[ReceivedTime]", True)
# Check all items and ReceivedTime.
for it, message in enumerate(messages):
print(f'{it}t{message.ReceivedTime} - {message.Subject}')
# If recevied one hour before, print it.
received_time = dt.datetime.utcfromtimestamp(message.ReceivedTime.timestamp())
if received_time >= one_hour_before:
print(f'^^^tRECEIVED ONE HOUR BEFORE')
# Get items received one hour before, if there are.
one_hour_before_messages =
messages.Restrict( "[ReceivedTime] >= '"
+ one_hour_before.strftime('%m/%d/%Y %H:%M %p')
+ "'")
# Print them
if len(one_hour_before_messages) == 0:
print('No items received one hour before.')
else:
print('Items received one hour before:')
for one_hour_before_message in one_hour_before_messages:
print(f'{one_hour_before_message.ReceivedTime}
- {one_hour_before_message.Subject}')
以上代码的结果:
one_hour_before: 2020-03-09 12:31:06.515809+09:00
受信トレイ
0 2020-03-09 13:19:04.102000+00:00 - RE: TEST
^^^ RECEIVED ONE HOUR BEFORE
1 2020-03-09 09:46:10.128000+00:00 - TEST
Items received one hour before:
2020-03-09 13:19:04.102000+00:00 - RE: TEST