C++ Outlook 邮件项目替换正文并在关闭时丢弃

C++ Outlook MailItem replace body and discard on close

本文关键字:正文 Outlook 项目 替换 C++      更新时间:2023-10-16

我在 Outlook 中有一个插件,当电子邮件来自外部或不受信任的来源时,它会在电子邮件中添加警告和电子邮件中的链接。 无论如何,当我替换正文中的某些内容时,当电子邮件以全视图打开时(没有阅读窗格,双击邮件项目的全视图),我甚至关闭邮件项目并丢弃更改,一切正常。(mailitem.onclose(olDiscard))

当我在打开阅读窗格的情况下执行此操作时,当我放弃更改时,Outlook 仍然保存更改,或者当用户尝试关闭 Outlook 时,它会询问用户"是否要将更改保存到 ....."如果用户在此期间单击了多封电子邮件,它会显示用户单击的所有电子邮件的弹出问题,我们替换了其正文。

这里的解决方案是什么?我该怎么做才能解决这个问题?我想对链接和正文进行更改,但是当用户单击另一封电子邮件时会丢弃它们。最终目标不是让 Outlook 询问用户"是否要保存更改..."弹出窗口。请指教。

我也无法对检查器进行更改,因为检查器是只读的。

附言插件是用C++写的。

解决方案是避免修改消息正文,如果您不想保留更改。

如果要向用户显示警告,请将任务窗格添加到检查器。或者只是用类别标记消息 - 它将显示在检查器中。

Outlook 对象模型不提供任何用于处理超链接单击的内容。作为可能的解决方法,您可以考虑实现以下功能:

  1. 在 Outlook 中选择或打开项目后,您可以将原始 URL 替换为您自己的 URL,如果需要,您可以在其中将原始 URL 作为编码参数传递。因此,如果允许打开URL,则可以进一步重定向请求。请注意,您可以使用资源管理器类的 SelectionChange 事件,当用户以编程方式或通过与用户界面交互选择不同或附加Microsoft Outlook 项时,将触发该事件。当用户(以编程方式或通过用户界面)单击或切换到包含项目的其他文件夹时,也会发生此事件,因为 Outlook 会自动选择该文件夹中的第一个项目。但是,如果文件夹是文件系统文件夹或显示具有当前 Web 视图的任何文件夹,则不会发生此事件。 您还可以考虑处理 Outlook 项目的 Open 事件,该事件在Inspector中打开父对象的实例时触发。 发生此事件时,Inspector对象已初始化,但尚未显示。Open 事件与 Read 事件的不同之处在于,每当用户在支持单元格内编辑的视图中选择项目以及在检查器中打开项目时,都会发生Read

  2. 另一种可能的解决方案是注册自定义 URL 处理程序。因此,基本上,将启动您注册的应用程序,而不是 Web 浏览器,您可以在其中决定是否启动 Web 浏览器并遵循 URL。有关详细信息,请参阅安装和注册协议处理程序。