【问题标题】:Python Outlook how to handle recall emailPython Outlook 如何处理召回电子邮件
【发布时间】:2022-03-26 22:50:15
【问题描述】:

我的项目适用于收件箱中的电子邮件。当进程收到“召回”电子邮件时,它会崩溃。召回电子邮件没有主题属性。我想写一些错误处理。我找不到将电子邮件移动到另一个文件夹或从 Outlook 中删除此类电子邮件的方法。

目前我的代码使用 GetPrevious() 方法跳过此类项目,但电子邮件仍在收件箱中 您有任何想法如何让“召回”电子邮件从收件箱文件夹中消失吗?

    obj_emails = obj_inbox.Items
    obj_email = obj_emails.GetLast()

    if obj_email.MessageClass == 'IPM.Outlook.Recall':
        obj_email = obj_emails.GetPrevious()

【问题讨论】:

    标签: python email outlook


    【解决方案1】:

    Outlook 对象模型不提供用于处理或生成召回项目的任何内容。您可以考虑使用 Outlook 所基于的低级 API - 扩展 MAPI。您也可以考虑使用第三方组件,即对 Redemption 等低级 API 的包装器。

    尝试使用MFCMAPI 确保可以轻松处理(移动或移除)召回项目。

    【讨论】:

      【解决方案2】:

      检查 Class 属性 - 所有 OOM 对象都会公开它。对于MailItem,它将是 43 (OlObjectClass.olMail)。对于ReportItem - 46 (OlObjectClass.olReport)

      【讨论】:

      • Class 如何帮助处理 Outlook 中的召回项目?
      • OP 需要过滤掉报告项以避免访问ReportItem 未公开的属性。
      • 据我记忆,这不是一个报告项目。报告项具有IPM.Report 消息类。
      • “IPM.Outlook.Recall”消息由 OOM 中的 MailItem 对象表示。但是当访问某些属性(例如正文,但不是主题)时,它会引发异常。检查此类消息的唯一方法是通过 MessageClass 属性。
      • 是的,这就是我想指出的。它不是 Outlook 中的报告项目,OP 做得对。
      【解决方案3】:

      感谢您的建议。 我不想使代码复杂化,所以我使用 MessageClass 属性来捕获召回电子邮件。下一个信息将发送给团队以删除此类电子邮件。

      if obj_email.MessageClass == 'IPM.Outlook.Recall':
                  raise Exception(f"There is a recall email in mailbox. Please remove it from inbox.")

      【讨论】:

        猜你喜欢
        • 2019-05-17
        • 2011-05-22
        • 2011-05-24
        • 1970-01-01
        • 2021-09-06
        • 2021-11-13
        • 1970-01-01
        • 2016-07-20
        • 2020-04-04
        相关资源
        最近更新 更多