簡體   English   中英

使用 win32com 通過 Python 訪問 Outlook.Application 導致錯誤

[英]Accessing Outlook.Application via Python using win32com results in error

我們有一個應用程序,它通過以下代碼片段訪問用戶的 Outlook 帳戶(請參閱最受好評的答案): 通過 MAPI 使用 Python 從 Outlook 中讀取電子郵件

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

它工作了好幾個月,唉,幾天前,它開始在所有組織機器上失敗,同時返回以下錯誤: AttributeError: 'module' object has no attribute 'CLSIDToClassMap'

錯誤來源為:WinPython-32bit-3.4.4.2\\python-3.4.4\\lib\\site-packages\\win32com\\client\\gencache.py

我懷疑這與應用於 Outlook 的安全補丁有關。 我們使用 Office 2010(Outlook 14.0.7173.500 32 位)

互聯網有 2007 年相同問題的痕跡: https : //mail.python.org/pipermail/python-win32/2007-August/006147.html

也許問這個人

此屬性錯誤的主要原因是您的 COM 服務器已從后期綁定(動態)轉換為早期綁定(靜態)。

  • 在后期綁定中,每當調用一個方法時,都會向對象查詢該方法,如果成功,則可以進行調用。
  • 在早期綁定中,對象模型的信息是根據對象調用提供的類型信息預先確定的。 早期綁定使用 MakePy。 此外,早期綁定區分大小寫。

有兩種方法可以解決此問題:

  1. 使用動態模塊強制您的代碼以面向后期綁定的方式工作。 使用示例:

     "win32com.client.dynamic.Dispatch()" instead of "win32com.client.Dispatch()"
  2. 使用駝峰敏感關鍵字作為早期面向綁定的方式。 使用示例:

     "excel.Visible()" instead of "excel.VISIBLE()" or "excel.visible()"

或者您也可以從 temp 中刪除 gen_py 文件夾,因為它使 win32com 以早期綁定方式運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM