0

打开 Outlook 电子邮件后,我需要打印正文。这是代码:

import win32com.client as client

outlook=client.Dispatch("Outlook.Application").GetNamespace("MAPI")
inbox=outlook.GetDefaultFolder(6)

messages = inbox.Items
print(inbox.Items.Count)
print(inbox.Parent.Name)
for i in range(5):
    message = messages.GetNext()
    print(""+message.Subject, str(message.ReceivedTime))
    print(message.Body)

错误是这样的:

Traceback (most recent call last):
  File "c:/Users/source/repos/Tests/pru.py", line 12, in <module>
    print(message.Body)
  File "C:\Users\venvs\frameworkenv\lib\site-packages\win32com\client\__init__.py", line 583, in __getattr__
    return self._ApplyTypes_(*args)
  File "C:\Users\venvs\frameworkenv\lib\site-packages\win32com\client\__init__.py", line 572, in _ApplyTypes_
    self._oleobj_.InvokeTypes(dispid, 0, wFlags, retType, argTypes, *args),
pywintypes.com_error: (-2147467260, 'Operation aborted', None, None)
4

1 回答 1

0

该异常与访问 Outlook 项目的属性有关。以下代码假定您默认处理MailItem对象:

print(""+message.Subject, str(message.ReceivedTime))
print(message.Body)

但事实上,一个文件夹可能包含不同的项目类型,例如约会、笔记、任务、文档等。因此,在访问MailItem特定属性之前,我建议检查项目的类型。例如,您可以尝试使用以下代码:

# Find only mail items and report, note, meeting etc items
if '_MailItem' in str(type(message)):
   print(type(message))

如果您尝试Body使用代码读取 SMIME 消息的属性,也可能发生这种情况。该电子邮件是否已签名/加密?

有关更多信息,请参阅阅读 MailItem.Body throws COMException“底层安全系统中发生错误”

于 2022-01-04T20:33:39.680 回答