python - 从特定日期检索电子邮件
问题描述
我正在尝试检索超过 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
解决方案
首先,您将 DateTime 值与字符串进行比较。将字符串转换为日期时间值。
其次,永远不要遍历文件夹中的所有项目,而是使用Items.Restrict(返回受限Items
集合):
messages = messages.Restrict("[Received] >= '1/12/2020 0:00am' ")
推荐阅读
- javascript - Jquery脚本键入脚本
- r - R使用tidyr的单独分隔列值,但值在嵌套列表中
- c++ - C++ 初始化风格
- python - Django 已安装但无法导入
- php - 如何在循环下获取wordpress循环中的当前项目?
- node.js - 试图在我的系统中安装 mangoose 给出错误 404 not found mangoose@latest
- javascript - 如何在angularfire 2版本5中将密钥添加到添加到节点的对象
- mysql - 删除后触发 THEN UPDATE mysql
- python - 用于远程 ssh 的 Paramiko
- php - 使用 Ajax 从 MySQL 中删除记录