首页 > 解决方案 > 从特定日期检索电子邮件

问题描述

我正在尝试检索超过 2020 年 12 月 1 日的电子邮件,但得到一个ValueError. 我尝试添加.replace(microseconds=0)str(message.ReceivedTime)仍然收到此错误。

错误

    Traceback (most recent call last):
  File "C:/Users/SLID/PycharmProjects/PPC_COASplitter/PPC_Ack.py", line 178, in <module>
    get_url = readEmail()
  File "C:/Users/zSLID/PycharmProjects/PPC_COASplitter/PPC_Ack.py", line 144, in readEmail
    if str(message.ReceivedTime) >= '2020-12-1 00:00:00' and 'P1 Cust ID 111111 File ID' in message.Subject:
  File "C:\Program Files (x86)\Python37-32\lib\site-packages\win32com\client\dynamic.py", line 516, in __getattr__
    ret = self._oleobj_.Invoke(retEntry.dispid,0,invoke_type,1)
ValueError: microsecond must be in 0..999999

代码

def readEmail():

    outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
    folder = outlook.Folders.Item('SharedMailbox, PPC-Investigation')
    inbox = folder.Folders.Item('Inbox')

    messages = inbox.Items
    messages.Sort("[ReceivedTime]", True)

    for message in messages:
        
        if str(message.ReceivedTime) >= '2020-12-1 00:00:00' and 'P1 Cust ID 111111 File ID' in message.Subject:
            print("")
            print('Received from: ',message.Sender)
            print("To: ", message.To)
            print("Subject: ", message.Subject)
            print("Received: ", message.ReceivedTime)
            print("Message: ", message.Body)
            get_url = re.findall(r'(https?://[^\s]+)', message.Body)[2].strip('>')

            return get_url

标签: pythonoutlookwin32com

解决方案


首先,您将 DateTime 值与字符串进行比较。将字符串转换为日期时间值。

其次,永远不要遍历文件夹中的所有项目,而是使用Items.Restrict(返回受限Items集合):

messages = messages.Restrict("[Received] >= '1/12/2020 0:00am' ")

推荐阅读