使用 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 使用 COM 对象
在 Python 中使用 win32com.client 文本到语音/语音识别