通过python win32com检索outlook联系人
我正在尝试使用通过python win32com检索outlook联系人,python,windows,outlook,win32com,Python,Windows,Outlook,Win32com,我正在尝试使用Python从Outlook获取联系人。 代码是: import win32com.client import pywintypes o = win32com.client.Dispatch("Outlook.Application") ns = o.GetNamespace("MAPI") profile = ns.Folders.Item("Outlook") contacts = profile.Folders.I
Python
从Outlook
获取联系人。
代码是:
import win32com.client
import pywintypes
o = win32com.client.Dispatch("Outlook.Application")
ns = o.GetNamespace("MAPI")
profile = ns.Folders.Item("Outlook")
contacts = profile.Folders.Item("Contacts")
但其给出的错误如下:
Traceback (most recent call last):
File "my_pro.py", line 7, in <module>
profile = ns.Folders.Item("Outlook")
File "C:\DOCUME~1\Manoj\LOCALS~1\Temp\gen_py\2.7\00062FFF-0000-0000-C000-00000
0000046x0x9x3\_Folders.py", line 70, in Item
ret = self._oleobj_.InvokeTypes(81, LCID, 1, (9, 0), ((12, 1),),Index
pywintypes.com_error: (-2147352567, 'Exception occurred.', (4096, u'Microsoft Of
fice Outlook', u'The operation failed. An object could not be found.', None, 0,
-2147221233), None)
回溯(最近一次呼叫最后一次):
文件“my_pro.py”,第7行,在
profile=ns.Folders.Item(“Outlook”)
文件“C:\DOCUME~1\Manoj\LOCALS~1\Temp\gen\u py\2.7\00062FFF-0000-0000-C000-00000
0000046x0x9x3\\ u Folders.py”,第70行,项目中
ret=self.\uOleObj.\uInvokeTypes(81,LCID,1,(9,0),((12,1),),索引
pywintypes.com_错误:(-2147352567,'发生异常',(4096,u'Of Microsoft
fice Outlook',u'操作失败。找不到对象。',无,0,
-2147221233),无)
我不明白它为什么会抛出错误,因为我有一个名为
Outlook
的配置文件,您可能没有名为“Outlook”的配置文件(除非您创建了一个) 通常,“配置文件名”是指您的“收件箱”所在的顶级文件夹的名称。与“个人文件夹”一样
Outlook.pst
文件而不是Exchange服务器提取联系人。
- 有关从Exchange服务器上的全局地址列表中提取联系人的信息,请参见此
- 使用python 3.8、Windows 10、Outlook Office 365进行测试
contacts\u items
对象后,使用相应的属性
提取所需信息。
- 适用于
outlook.Application.Quit()
没有关闭outlook,因此可能需要在任务管理器中关闭它导入win32com.client
#创建outlook对象
outlook=win32com.client.Dispatch(“outlook.Application”)
ns=outlook.GetNamespace(“MAPI”)
#在默认文件夹中为联系人创建对象
contacts\u items=ns.GetDefaultFolder(10.items)
#打印姓名和电子邮件地址
对于联系人项目中的c:
打印(f'{c.FullName}:{c.Email1Address}')
#创建联系人记录
联系人={c.FullName:c.email1contacts_items}中c的地址
#关闭应用程序
outlook.Application.Quit()
- 以下代码来自,但已针对Python3.8进行了更新
MSOutlook类
导入win32com.client
调试=0
类别MSOutlook:
定义初始化(自):
self.outlookfind=0
尝试:
self.oOutlookApp=\
win32com.client.gencache.EnsureDispatch(“Outlook.Application”)
self.outlookfind=1
除:
打印(“MSOutlook:无法加载Outlook”)
self.records=[]
def loadContacts(自身,按键=无):
如果未找到self.outlookfind:
返回
#这应该使用更多的try/except块或嵌套块
onMAPI=self.oOutlookApp.GetNamespace(“MAPI”)
接触的数量=\
onMAPI.GetDefaultFolder(win32com.client.constants.olFolderContacts)
如果调试:
打印(f“联系人数:{len(of contacts.Items)}”)
对于范围内的oc(len(of contacts.Items)):
接触=接触的数量。项目。项目(oc+1)
如果contact.Class==win32com.client.constants.olContact:
如果键为“无”:
#如果我们不给一套钥匙
#然后建立一个我们将使用的密钥列表
#能够处理
#不过,我没有包含时间类型的字段
#这些可能是可以解释的
键=[]
用于输入联系人的密钥。\u属性\u映射\u获取\u:
如果isinstance(getattr(contact,key),(int,str,unicode)):
key.append(key)
如果调试:
keys.sort()
打印(“字段\n==============================================”)
对于键入键:
打印(键)
记录={}
对于键入键:
记录[键]=getattr(联系人,键)
如果调试:
打印(oc,记录['FullName'])
self.records.append(记录)
类用法
如果调试:
打印(“尝试加载Outlook”)
oOutlook=MSOutlook()
#延迟检查win32上的Outlook复选框
如果不是oOutlook.outlookfind:
打印(“找不到Outlook”)
系统出口(1)
字段=['FullName',
“公司名称”,
“MailingAddressStreet”,
“MailingAddressCity”,
“MailingAddressState”,
“MailingAddressPostalCode”,
“家庭电话号码”,
“商业电话号码”,
“移动电话号码”,
“Email1地址”,
“身体”
]
如果调试:
#导入时间
打印(“加载记录…”)
startTime=time.time()
#您可以获取所有数据字段
#或者只是一组特定的字段,速度要快得多
#oOutlook.loadContacts()
oOutlook.loadContacts(字段)
如果调试:
打印(f“加载时间为{time.time()-startTime}秒”)
打印(f“联系人数:{len(oOutlook.records)}”)
对于范围内的i(len(oOutlook.records)):
打印(f“联系人:{oOutlook.records[i]['FullName']}”)
打印(f“正文:\n{oOutlook.records[i]['Body']}”)
- 此选项用于在Outlook连接到Exchange服务器时提取联系人
- 我设法找到/修改了一个工作解决方案。它将Outlook中所有联系人的电子邮件地址和全名保存为一个列表:
导入win32com.client
#Outlook资料
outApp=win32com.client.gencache.EnsureDispatch(“Outlook.Application”)
outGAL=outApp.Session.GetGlobalAddressList()
entries=outGAL.AddressEntries
#用于存储联系人信息的空列表
数据集=列表()
#反复浏览您的联系人簿并将其提取/附加到列表中
对于条目中的条目:
如果