【问题标题】:Outlook plugin to replace text in emailsOutlook插件替换电子邮件中的文本
【发布时间】:2022-04-03 02:20:54
【问题描述】:

Visual Studio 2015。Outlook 2016。

我想编写一个插件,在阅读窗格或检查器中查看电子邮件时用超链接替换某些形式的文本。

我可以订阅 ItemLoad 事件:

    private void ThisAddIn_Startup(object sender, System.EventArgs e)
    {
        this.Application.ItemLoad += new Microsoft.Office.Interop.Outlook.ApplicationEvents_11_ItemLoadEventHandler(OnItemLoad);
    }

    private void OnItemLoad(object item)
    {
        Outlook.MailItem mailItem = item as Outlook.MailItem;

        if (mailItem != null)
        {
            System.Diagnostics.Debug.WriteLine("OnItemLoad: " + mailItem.Subject);
        }
    }

但是当它由于某种原因被触发时,我无法访问 Outlook.MailItem 实例上的任何内容。我得到以下异常:

“System.Runtime.InteropServices.COMException”类型的异常 发生在 FirstOutlookAddIn.dll 中但未在用户代码中处理

附加信息:项目的属性和方法不能 在此事件过程中使用。

提前致谢!

【问题讨论】:

    标签: c# outlook vsto outlook-addin


    【解决方案1】:

    该错误消息非常明确 - 在某些事件处理程序中无法访问任何 OOM 属性或方法。

    一种解决方法是等到您退出事件处理程序 - 使用不同的事件(如果可用),或在 OOM 事件处理程序中启用计时器,然后在计时器事件处理程序中执行您需要执行的操作(当它触发时,您将退出 OOM 事件处理程序)。使用 Forms 命名空间中的 Timer 类,因为它在主线程上触发。

    但请记住,修改现有项目不是一个好主意 - 更改可能会保留(同时更新上次修改日期),或者 Outlook 会提示用户保存更改。

    尝试使用通过Inspector.GetWordEditor 公开的 Word 编辑器。对于阅读窗格,您可以使用Redemption 中的ReadingPane 对象(我是它的作者)。

    【讨论】:

    • 有点奇怪,你会得到一个传递给你不能使用的事件处理程序的对象——尽管我猜你可以存储引用并在以后使用。看起来有点笨拙,但它确实有效。谢谢大家!
    猜你喜欢
    • 2013-08-29
    • 1970-01-01
    • 1970-01-01
    • 2018-08-16
    • 2020-07-05
    • 2011-09-28
    • 2015-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多