如何更改正在预览窗格中显示或打开的MailItem

时间:2012-07-13 18:31:58

标签: c# outlook ms-office outlook-addin office-2010

我正在尝试编写一个AddIn,可以在加载时修改Outlook MailItem(通过预览窗格或通过打开它)。这是我到目前为止的代码,但我似乎无法实际访问MailItem

public partial class ThisAddIn
{
    private void ThisAddIn_Startup(object sender, EventArgs e)
    {
        Application.ItemLoad += ApplicationOnItemLoad;
    }

    private void ApplicationOnItemLoad(object item)
    {
        var mail = item as MailItem;

        if (mail != null)
        {
            Console.WriteLine(mail.HTMLBody);
        }
    }

    // Etc...
}

代码到达Console.WriteLine(mail.HTMLBody);语句就好了,这意味着将项目作为Outlook MailItem强制转换(它最终不会为null)。但是,我无法访问任何MailItem成员......它只是抛出异常:

  

“System.Runtime.InteropServices.COMException”类型的第一次机会异常   发生在MyOutlookProject.DLL中   
  类型为'System.Reflection.TargetInvocationException'的第一次机会异常   发生在mscorlib.dll

1 个答案:

答案 0 :(得分:2)

Application.ItemLoad在项目完全加载之前发生。除ItemClass以外的MessageClass,您无法阅读任何属性。

来自MSDN ......

  

当Outlook项开始加载到内存时,会发生此事件。除了Outlook项的Class和MessageClass属性的值之外,该项的数据尚不可用,因此在为Item中返回的Outlook项调用Class或MessageClass以外的任何属性时发生错误

要访问预览窗格中的MailItem,您应该查看Explorer.Selection。要访问已打开的MailItem通过检查员),请使用Inspectors.NewInspector