在过去1小时内无法使用Python从Outlook读取电子邮件



在过去的一个小时里,我正试图从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

最新更新