【问题标题】:Copy the Outlook mail body content to WORD Document using Python使用 Python 将 Outlook 邮件正文内容复制到 WORD 文档
【发布时间】:2018-06-24 18:17:46
【问题描述】:

我想编写一个 python 程序来复制 Outlook 邮件正文(邮件正文:包含表格)的内容并将其粘贴到 word 文档。

import win32com.client
import pythoncom

class Handler_Class(object):
    def OnNewMailEx(self, receivedItemsIDs):
        for ID in receivedItemsIDs.split(",")
            mailItem = outlook.Session.GetItemFromID(ID)
            print(mailItem.Body)
outlook = win32com.client.DispatchWithEvents("Outlook.Application", Handler_Class)
pythoncom.PumpMessages()

当我尝试使用“print(mailItem.Body)”打印邮件正文时,表格内容显示为文本,而不是表格格式。

谁能帮助我如何将邮件正文内容导出到 word 文档而不使用 python 更改其格式。

【问题讨论】:

    标签: python-3.x vbscript outlook


    【解决方案1】:

    首先,传递给Application类的NewMailEx事件的字符串不需要拆分。

    NewMailEx 事件在新邮件到达收件箱时以及在客户端规则处理发生之前触发。您可以使用EntryIDCollection 数组中返回的Entry ID 来调用NameSpace.GetItemFromID 方法并处理该项目。 EntryIDsCollection 字符串包含对应于该项目的条目 ID。请注意,当EntryIDCollection 包含自上次触发事件以来收件箱中收到的所有项目的以逗号分隔的条目 ID 列表时,此行为与早期版本的事件有所不同。请谨慎使用此方法,以尽量减少对 Outlook 性能的影响。但是,根据客户端计算机上的设置,新邮件到达收件箱后,垃圾邮件过滤和将新邮件从收件箱移动到另一个文件夹的客户端规则等过程可能会异步发生。

    Outlook 对象模型提供了三种处理项目主体的主要方式:

    1. Body
    2. HTMLBody
    3. Word 编辑器。 Inspector 类的 WordEditor 属性返回代表消息正文的 Word 文档实例。因此,您可以使用 Word 对象模型对消息正文进行任何您需要的操作。您可以访问代表消息正文的文档并复制/粘贴所需的范围或段落。

    您可以在 MSDN 的 Chapter 17: Working with Item Bodies 中阅读有关所有这些方式的更多信息。

    【讨论】:

    • 感谢您的回复。您提供的解决方案是在 VBScript 中。为此,我需要将 python 对象 Mailitem 传递给 VBScript public sub Word_Conversion(OutlookMail as Mailitem) 你能帮我弄清楚如何将 python 对象传递给 VB 宏.. 我是 VB 的新手
    • Outlook 对象模型对于所有编程语言都是相同的。您已经拥有 mailItem 实例:mailItem = outlook.Session.GetItemFromID(ID)
    • 我已经尝试通过将 mailitem 传递给 vb 宏。我收到错误 pythoncom error: Python error invoking COM method. 。你能提供一些见解吗? ..我被困在了这个:(
    • 简单,上面的python代码是我用来获取邮件实例的,这是我将在python脚本中调用的VBScript宏public sub Word_Conversion(OutlookMail as Mailitem)。在这个宏中,我试图打印邮件项(TO,BODY)中的属性,然后我将创建 word 对象,复制并粘贴内容。