使用 python win32com Outlook 清楚地记录阅读电子邮件功能

Posted

技术标签:

【中文标题】使用 python win32com Outlook 清楚地记录阅读电子邮件功能【英文标题】:Clearly documented reading of emails functionality with python win32com outlook 【发布时间】:2014-05-13 21:00:59 【问题描述】:

我正在尝试通过 win32com 更好地了解 Outlook 交互。我一直无法找到明确的文档来允许我利用 win32com 有效地阅读电子邮件,从我目前的调查来看,这似乎是用户相当普遍的情绪。于是就有了以下信息和要求:

有人可以吗;

1.提供指向清晰文档位置的链接(如果存在)

2。在下面展开

以下是我根据阅读其他人的代码发现的当前功能。

获取以下代码:

import win32com

outlook=win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")

inbox=outlook.GetDefaultFolder(6)

messages=inbox.Items

for message in messages:
    attachments = message.attachments

    for attachment in attachments:
        pass

据我所知,上面使用的对象具有以下功能:

收件箱-

.Folders
.Items

消息 -

.GetFirst()
.GetLast()
.GetNext()
.GetPrevious()
.Attachments

消息-

.Subject
.Body
.To
.Recipients
.Sender
.Sender.Address

附件 -

.item()
.Count

附件-

.filename

如果您知道更多功能,请在您的答案中添加。

【问题讨论】:

我的机器上设置了三个 Outlook 配置文件。如何在 python 中选择要选择的配置文件? 抱歉,时间有限。我认为您需要将 GetDefaultFolder 替换为指向另一个配置文件的指针。我认为您不会太远探索以下链接和下拉选项。 msdn.microsoft.com/en-us/vba/outlook-vba/articles/…。祝你好运。 谢谢。是的,我需要指向另一个配置文件。我看到了您提供的链接,但没有得到任何相关信息。如果您找到有关这方面的信息,请告诉我。 message.SenderEmailAddress 如何使用主题过滤记录 【参考方案1】:

应用程序参考的视觉基础是您的朋友。尝试从这个链接开始...

Interop Outlook Mailitem Properties

例如,我可以看到该消息可能具有比您上面列出的更多属性。例如。

message.CC message.Importance message.LastModificationTime

【讨论】:

这是我正在寻找的确切文档,非常感谢您的帮助。 我们没有在任何地方提供用户名和密码。那么 Outlook 如何对帐户进行身份验证。 @AbdulNiyasPM 通过本地 Outlook 应用程序还是不?【参考方案2】:

对于想知道如何访问任何默认文件夹而不仅仅是“收件箱”的人来说,这里是列表:

3  Deleted Items
4  Outbox
5  Sent Items
6  Inbox
9  Calendar
10 Contacts
11 Journal
12 Notes
13 Tasks
14 Drafts

还有更多(提醒、同步错误等);您可以使用此代码获取整个列表(灵感来自 John Cook's solution 到文件夹):

import win32com
outlook=win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")
for i in range(50):
    try:
        box = outlook.GetDefaultFolder(i)
        name = box.Name
        print(i, name)
    except:
        pass

我没有在此处粘贴整个列表,因为我的列表是波兰语,不会有什么帮助。

【讨论】:

要使其正常工作,您可能需要将导入语句修改为:import win32com.client。最初,此解决方案在 Python 3.6 上无法正常工作。通过添加 .cleint 对其进行调整解决了该问题。【参考方案3】:

我想我也应该添加一些关于浏览文件夹的内容 - 这一切都来自上面的 Microsoft 文档,但在这里可能会有所帮助,特别是如果你试图在 Outlook 文件夹结构中的任何位置,除了收件箱。

您可以使用folders 浏览文件夹集合 - 请注意,在这种情况下,GetNamespace 之后没有 GetDefaultFolder(否则您可能会看到收件箱)。

outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace('MAPI')
folder = outlook.Folders[1]

数字是您要访问的文件夹的索引。要找出其中有多少子文件夹:

folder.Count

如果有更多子文件夹,您可以使用另一个Folders 更深入:

folder.Folders[2]

Folders 返回子文件夹列表,所以要获取当前目录下所有文件夹的名称,可以使用快速循环。

for i in range(folder.Count):
    print (folder[i].Name)

每个子文件夹都有一个.Items 方法来获取电子邮件列表。

【讨论】:

【参考方案4】:

您可以在OutlookSpy 中查看所有实时 Outlook 对象及其数据。

MailItem 对象属性、方法和事件在https://msdn.microsoft.com/en-us/library/office/ff861332.aspx 有完整记录

【讨论】:

【参考方案5】:

对于附件 https://docs.microsoft.com/en-us/office/vba/api/outlook.attachment (见属性)

attachment.FileName
attachment.Type
attachment.Position
attachment.BlockLevel
attachment.Class
attachment.DisplayName
attachment.Parent
attachment.Session
attachment.Size
attachment.Index
attachment.Application

【讨论】:

【参考方案6】:

这个页面绝对是pywin32最全的资源!

只需添加一个:

 message.senton.date() # for received date only 
 message.senton.time() # for received time only
 message.senton # for date and time

另外,刚刚发现上面基因组共享的“Interop Outlook Mailitem Properties”中显示的消息属性(如 senton、attachment 和所有其他属性)可以写为完全小写或完全大写或混合。

【讨论】:

以上是关于使用 python win32com Outlook 清楚地记录阅读电子邮件功能的主要内容,如果未能解决你的问题,请参考以下文章

Python使用win32com创建Access数据库

在 Python 中通过 win32com 使用 COM 对象

在 Python 中使用 win32com.client 文本到语音/语音识别

使用Python和win32com访问Excel COM中的枚举常量

python win32gui模块下载

使用 win32com.client 模块在 Python 中将 .XLSX 转换为 .XLS