从 Outlook 帐户中的特定邮件 ID 获取未读电子邮件的正文项目

问题描述 投票:0回答:2

想感谢以下问题的答案

我试图从特定邮件 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:
python email outlook win32com office-automation
2个回答
0
投票

使用

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'"

0
投票

首先,如果您只需要未读消息,则需要添加一个额外的限制:

[Unread] = true
。正如 Eugene 所指出的,您需要将所有限制合并为一个限制。

此外,由于您不想要所有匹配项,因此您可能想要使用

Items.Find/FindNext
而不是
Items.Restrict
- 这样您就可以在找到 5 个匹配项后退出循环,而不是从
Restrict
中检索所有匹配项。

© www.soinside.com 2019 - 2024. All rights reserved.