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

2024-09-26 22:08:25 发布

您现在位置:Python中文网/ 问答频道 /正文

在过去的一个小时里,我一直在尝试阅读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),它给了我收件箱邮件的总数。而len(lastHourMessages)显示为0

据我所知,Restrict函数工作不正常。谁能帮帮我吗


Tags: importclientdatetimeasdtnowwin32commessages
1条回答
网友
1楼 · 发布于 2024-09-26 22:08:25

将下面第行的%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://docs.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

相关问题 更多 >

    热门问题