Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过python win32com检索outlook联系人_Python_Windows_Outlook_Win32com - Fatal编程技术网

通过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服务器上的全局地址列表中提取联系人的信息,请参见此
  • 这需要在Windows上安装Outlook,但不运行Outlook。
    • 使用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
    #用于存储联系人信息的空列表
    数据集=列表()
    #反复浏览您的联系人簿并将其提取/附加到列表中
    对于条目中的条目:
    如果