【问题标题】:Python script to save email in a physical folder将电子邮件保存在物理文件夹中的 Python 脚本
【发布时间】:2021-06-15 03:32:43
【问题描述】:

我是第一次使用堆栈溢出。我在这里联系是因为我无法使用 python 保存 Outlook 电子邮件 (.MSG)。这个想法是在物理驱动器中存档电子邮件。

一切正常,除了抛出一个非常一般错误的另存为命令。如果有人可以帮助我,那将是很大的帮助。

这是我正在使用的代码:

import win32com.client as win32
from win32com.client import Dispatch
import os
import re

os.chdir("C:\\Users\\username\\Downloads\\RPA")

outlook = win32.gencache.EnsureDispatch("Outlook.Application").GetNamespace("MAPI")
inbox = outlook.GetDefaultFolder(6)
print(inbox)
messages = inbox.Items
for message in messages:
    message = messages.GetNext()
    name = str(message.Subject)
    name = re.sub('[^A-Za-z0-9]+', '', name) + '.msg'
    print(name)
    # message.Display(True)
    message.SaveAs(os.getcwd() + '//' + name)

执行代码时遇到的错误

    return self._oleobj_.InvokeTypes(61521, LCID, 1, (24, 0), ((8, 1), (12, 17)),Path
    pywintypes.com_error: (-2147467260, 'Operation aborted', None, None)

【问题讨论】:

    标签: python outlook office365


    【解决方案1】:

    在代码中,您将遍历收件箱文件夹中的所有项目:

    for message in messages:
        message = messages.GetNext()
        name = str(message.Subject)
        name = re.sub('[^A-Za-z0-9]+', '', name) + '.msg'
    

    如果文件夹包含大量项目,则操作可能需要一些时间才能完成。我建议分块处理项目,这样您就可以控制 Outlook 并防止冻结 UI(如果有)。 Find/FindNextRestrict 方法可以帮助解决这个问题。在以下文章中详细了解这些方法:

    另一点是文件夹中所有项目的文件名应该是唯一的。传递给SaveAs 方法的实际字符串参数是什么?

    您还需要确保文件名中没有使用禁止符号。

    【讨论】:

    • 感谢您的回复。我会尝试让你知道它是否有效
    猜你喜欢
    • 2018-07-10
    • 1970-01-01
    • 2012-12-01
    • 2015-01-22
    • 1970-01-01
    • 2016-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多