想感谢以下问题的答案
我试图从特定邮件 ID 读取最新的 5 封未读电子邮件,并在变量中获取邮件正文数据。
我试过使用下面的代码:
import win32com.client
import os
from datetime import datetime, timedelta
outlook = win32com.client.Dispatch('outlook.application')
mapi = outlook.GetNamespace("MAPI")
inbox = mapi.GetDefaultFolder(6)
messages = inbox.Items
received_dt = datetime.now() - timedelta(days=1)
received_dt = received_dt.strftime('%m/%d/%Y %H:%M %p')
messages = messages.Restrict("[ReceivedTime] >= '" + received_dt + "'")
messages = messages.Restrict("[SenderEmailAddress] = '[email protected]'")
messages = messages.Restrict("[Subject] = 'Sample Report'")
try:
for message in list(messages):
try:
s = message.sender
for body in message.Body:
使用
Restrict
方法的方法是正确的,但是您需要调用一次组合搜索条件组合成一个搜索条件。因此,与其连续三次调用 Restrict 方法:
messages = messages.Restrict("[ReceivedTime] >= '" + received_dt + "'")
messages = messages.Restrict("[SenderEmailAddress] = '[email protected]'")
messages = messages.Restrict("[Subject] = 'Sample Report'")
您可以使用 AND 和 OR 等逻辑运算符。例如:
search_criteria = "[ReceivedTime] >= '" + received_dt + "' AND [SenderEmailAddress] = '[email protected]' AND [Subject] = 'Sample Report'"
首先,如果您只需要未读消息,则需要添加一个额外的限制:
[Unread] = true
。正如 Eugene 所指出的,您需要将所有限制合并为一个限制。
此外,由于您不想要所有匹配项,因此您可能想要使用
Items.Find/FindNext
而不是 Items.Restrict
- 这样您就可以在找到 5 个匹配项后退出循环,而不是从 Restrict
中检索所有匹配项。