使用Python pywin32通过电子邮件地址检索Outlook内部电子邮件

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

我正在尝试使用 Python 访问 Outlook 邮件。

我从多个来源学到的代码:

# Import packages
import os
import win32com.client
from datetime import datetime, timedelta

# Initiate an Outlook session
outlook = win32com.client.Dispatch('Outlook.Application')
mapi = outlook.GetNamespace("MAPI")

# Specify the folder
inbox = mapi.GetDefaultFolder(6)
InboxMessages = inbox.Items

# Apply filters
ReceivedDateTime = datetime.now() - timedelta(days=7)
InboxMessages = [message for message in InboxMessages if message.ReceivedTime.timestamp() >= ReceivedDateTime.timestamp()]
InboxMessages = [message for message in InboxMessages if message.SenderEmailAddress.__contains__('mycompany.com')]

我有一个过滤发件人电子邮件地址的条件。

如果我指定我公司的电子邮件地址,它只会返回我收件箱中的部分电子邮件。

未返回的电子邮件似乎是带有我们用来分配电子邮件的标签的电子邮件。它们可能重要也可能不重要,包括休闲、环聊、紧急等。无论如何,如果分配了标签,则不会返回。

所有没有标签的公司邮件都会被退回。再说一次,这些邮件是谁发送的或者它们有多重要并不重要。
另外,来自外部来源的电子邮件似乎不存在这样的问题。

什么可能会导致这种结果,例如安全加密?

python vba outlook com pywin32
1个回答
1
投票

首先,永远不要循环遍历文件夹中的所有消息,你永远不会创建没有 WHERE 子句的 SELECT SQL 查询,不是吗?使用 Items.Restrict

Items.Find/FindNext
- 让商店提供商完成这项工作。

其次,两个邮箱之间发送的内部消息具有

"EX"
类型的发件人地址 (
MailItem.SenderEmailType == "EX"
),而不是
"SMTP"
。对
PidTagSenderSmtpAddress
属性(DASL 名称
"http://schemas.microsoft.com/mapi/proptag/0x5D01001F"
)创建限制 - 使用 OutlookSpy 查看消息(我是其作者,单击 IMessage 按钮)。

您的查询将类似于以下内容(它指定

PR_MESSAGE_DELIVERY_TIME
PidTagSenderSmtpAddress
PR_SENDER_EMAIL_ADDRESS
DASL 属性名称):

@SQL="http://schemas.microsoft.com/mapi/proptag/0x0E060040" > '2022-07-19' AND ("http://schemas.microsoft.com/mapi/proptag/0x5D01001F" LIKE '%@mycompany' OR "http://schemas.microsoft.com/mapi/proptag/0x0C1F001F" LIKE '%@mycompany.com')
© www.soinside.com 2019 - 2024. All rights reserved.