com_error 使用 python 在 windows outlook 中保存电子邮件时

com_error when saving emails in windows outlook with python

我正在使用 python 将电子邮件保存在指定的文件夹中并完成以下操作:

代码:

from  win32com.client import Dispatch
import os

outlook = Dispatch('outlook.application').GetNamespace("MAPI")
root = outlook.Folders[0].Folders[27]
targetPath = os.path.expanduser(r'\path\to\target\folder')
messages = root.Items
count = 0
for msg in messages:
    if msg.UnRead:
        msg.SaveAs(os.path.join(targetPath))
        msg.UnRead = False
        count +=1
print(str(count)+' emails archived to: '+targetPath)

我最终遇到了这个我以前从未见过的错误,而且我在 google 机器上没有任何运气......所以我来到 Whosebug 并将你从沉睡中唤醒。

Traceback (most recent call last):

  File "C:\Users\e582324\Documents\Python Scripts\untitled6.py", line 18, in <module>
    msg.SaveAs(os.path.join(targetPath))

  File "<COMObject <unknown>>", line 3, in SaveAs

com_error: (-2147352567, 'Exception occurred.', (4096, 'Microsoft Outlook', 'The operation failed.', None, 0, -2147024829), None)

知道是什么原因造成的吗?我有一个类似的脚本,它只保存附件并且工作正常。我的目标文件夹位于两个脚本的网络共享驱动器上,直到现在才出现问题。唯一真正的区别是使用 .SaveAs() 而不是 .SaveAsFile()

您需要指定文件名及其扩展名。有时仅传递路径是不够的,尤其是当您未指定格式时(请参阅第二个参数)。请注意,Outlook 文件夹可能包含不同类型的项目 - 邮件项目、约会、文档、便笺等。例如,这里有一个示例:

Item.SaveAs Environ("HOMEPATH") & "\My Documents\" & strname & ".txt", olTXT 

我还注意到您正在遍历文件夹中的所有项目:

for msg in messages:
    if msg.UnRead:

相反,您需要使用 Items class 的 Find/FindNextRestrict 方法。因此,您只会获得与您的条件相对应的项目,并且只会对它们进行迭代。在以下文章中阅读有关这些方法的更多信息: