使用Python的win32com outlook清晰记录电子邮件功能。

77

我正在尝试更好地理解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

如果你知道任何其他功能,请在你的回答中添加。


4
我在电脑上设置了三个Outlook个人资料。如何在Python中选择要使用的个人资料? - user5155835
1
抱歉,时间有限。我猜你需要用另一个配置文件的指针替换GetDefaultFolder。我认为你不会太远,只需探索以下链接和下拉选项即可:https://msdn.microsoft.com/en-us/vba/outlook-vba/articles/namespace-object-outlook。祝你好运。 - Phoenix
1
谢谢。是的,我需要指向另一个配置文件。我看到了您提供的链接,但没有找到任何相关信息。如果您找到了相关信息,请告诉我。 - user5155835
message.SenderEmailAddress - evandrix
如何使用主题筛选记录 - Jayank
6个回答

37

Visual Basic for Applications(VBA)参考文献在这里是您的朋友。尝试从此链接开始...

Interop Outlook Mailitem Properties

例如,我可以看到邮件可能具有比您上面列出的属性更多的其他属性。例如:

  • message.CC
  • message.Importance
  • message.LastModificationTime

2
这正是我在寻找的准确文档,非常感谢您的帮助。 - Phoenix
2
在这个问题中,我们没有提供任何用户名和密码。那么Outlook如何验证账户呢? - Abdul Niyas P M
你是通过本地 Outlook 应用程序还是其他方式发送的,@AbdulNiyasPM? - y.y

35

对于每个想知道如何访问默认文件夹而不仅仅是“Inbox”的人,这里是列表:

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

还有更多提醒、同步错误等;您可以使用此代码获取整个列表(受John Cook关于文件夹的解决方案启发):

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

我不会在这里粘贴整个列表,因为我的列表是用波兰语写的,所以不会真正有帮助。


2
为了使其正常工作,您可能需要修改导入语句为:import win32com.client。最初,这个解决方案在Python 3.6上无法正常工作。通过添加“.client”进行微调,问题得到了解决。 - Ken Carter

7

我觉得我应该补充一些有关浏览文件夹的内容-这都是从上面的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`方法来获取邮件列表。

3

0

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

只有一个要补充:

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

此外,刚刚发现类似“senton”、“attachment”以及“Interop Outlook Mailitem Properties”中显示的所有其他属性的情况都可以写成完全小写或大写或混合大小写的形式。

0
如何使用Microsoft文档来指导win32com代码:
1. 从命名空间接口开始:
首先导入win32com并创建一个outlook对象,该对象代表Outlook命名空间接口(链接中包含所有可调用的属性和方法)。这个对象作为访问Outlook应用程序中的所有内容的起点:
import win32com.client
outlook = win32com.client.Dispatch("Outlook.Application").GetNamespace("MAPI")

2. 导航文档:

导航文档最好从‘Outlook 命名空间接口’开始,点击超链接以查看要调用的方法或属性的返回类型。

或者:

您可以检查 'Class' 属性,该属性返回一个整数。请参考此表格以确定相关的接口。然后搜索标有 '____ 接口' 的页面,其中 ____ 代表您感兴趣的对象。


示例:浏览电子邮件账户、文件夹和邮件:

第一级是电子邮件账户

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

folders = outlook.Folders
for i, folder in enumerate(folders):
    print(i, folder.Name)

# 0 aaa@gmail.com
# 1 bbb@gmail.com
# 2 ccc@gmail.com

Level 2 是文件夹的第一层级。

account = folders[1]  # use index to select account; in this case bbb@gmail.com
account_folders = account.Folders
for i, folder in enumerate(account_folders):
    print(i, folder.Name)

# 0 Deleted Items
# 1 Inbox
# 2 Outbox
# 3 Sent Items
# 4 Notes
# 5 Journal
# … continues on 

如果您的文件夹中有文件夹,您可以继续这个模式。
访问电子邮件:
inbox_folder = account_folders[1]  # select inbox
print("number of email", inbox_folder.Items.Count)   # number of email 231  
for i, email in enumerate(inbox_folder.Items):
    print(i, email.Subject)

# 0 Meeting Time
# 1 Meeting follow-up
# 2 Scheduling another meeting
# 3 Can't make it to today's meeting
# … continues on 

访问电子邮件属性:

email = inbox_folder.Items[3]
print(email.SenderName)  # Jane Smith
print(email.SentOn)  # 2023-08-31 18:05:23+00:00
print(email.Body)  # Hi John, I can't make today's meeting because ...

完整的电子邮件属性列表。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接