尝试在 outlook 中调用 .GetFirst() 函数时出现 win32com 问题

Problem with win32com while trying to call .GetFirst() function in outlook

我使用 win32com 库与 outlook 交互,看不到异常出现与其他东西之间的关系。并非每次我 运行 代码都会出现异常。如果您给我一些链接以明确有关此库的文档或尝试帮助我解决问题,我将不胜感激

Exception appeared: (-2147023170, 'The remote procedure call failed.', None, None)

Traceback (most recent call last):

  File "C:/.../sources/main.py", line 60, in main

    logger=logger)

  File "Outlook_API_v1.py", line 142, in save_mail

    message = messages.GetFirst()

  File "C:\...\AppData\Local\Temp\gen_py.7[=10=]062FFF-0000-0000-C000-000000000046x0x9x6\_Items.py", line 53, in GetFirst

    ret = self._oleobj_.InvokeTypes(86, LCID, 1, (9, 0), (),)

pywintypes.com_error: (-2147023170, 'The remote procedure call failed.', None, None)

RPC_S_CALL_FAILED 通常意味着 out-of-proc COM 服务器(在您的情况下为 Outlook.Application)在您的代码 运行.

时关闭

Outlook 可能不会在满足您需求的内存中挂起。进程可以关闭。在这种情况下,您可能会在代码中看到所描述的错误。

为防止这种情况发生,我建议向 Explorers 集合中添加一个新的 Explorer 实例,并在完成之前保持其全部活动。 Explorers.Add 方法创建资源管理器的新实例 window。不要担心 window,资源管理器 window 最初是隐藏的。如果需要,您必须调用 Explorer 对象的 Display 方法使其可见。例如,以下 VBA 代码显示了如何使用此方法:

Sub DisplayDrafts() 
 Dim myExplorers As Outlook.Explorers
 Dim myOlExpl As Outlook.Explorer 
 Dim myFolder As Outlook.Folder 
 
 Set myExplorers = Application.Explorers
 Set myFolder = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderDrafts) 
 
 Set myOlExpl = myExplorers.Add(myFolder, olFolderDisplayNoNavigation) 
 
 myOlExpl.Display 
 
End Sub

注意,Outlook 是单例的。如果您尝试在用户使用该应用程序时将其自动化然后关闭它,您可能会陷入相同的场景。