Outlook插件替换电子邮件中的文本

时间:2017-02-08 04:09:58

标签: c# outlook vsto outlook-addin

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但未在用户代码中处理

     

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

提前致谢!

1 个答案:

答案 0 :(得分:2)

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

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

请记住,修改现有项目并不是一个好主意 - 更改将保持不变(也可以更新上次修改日期),或者Outlook将提示用户保存更改。

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