Outlook VSTO - 如何检查MailItem是否存在(新电子邮件对话框已打开且是活动检查器)

时间:2016-08-10 23:38:16

标签: c# vsto mailitem

我有这样的代码

var mi = MyAddIn.Application.ActiveInspector().CurrentItem as MailItem;

if (mi != null)
{
    mi.Attachments.Add(myFilePath);
}

此代码的问题在于它假定将打开新邮件对话框(ActiveInspector CurrentItemMailItem)。但是,在我的情况下,情况并非如此。

如果不是这种情况,那么获得mi的上述代码将会抛出NullReferenceException

如何检查是否打开了新的邮件对话框,如果是,则使用上面的行来获取它;否则创建新的MailItem(新邮件对话框)?

我正在尝试做这样的事情:

var mi;

if (MyAddIn.Application.ActiveInspector().CurrentItem != null)
{
    // get existing
    mi = MyAddIn.Application.ActiveInspector().CurrentItem as MailItem;
}
else 
{
    // otherwise, create new one
    mi = MyAddIn.Application.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem);
}

// now use it to attach file   
if (mi != null)
{
    mi.Attachments.Add(myFilePath);
}

1 个答案:

答案 0 :(得分:1)

您需要先检查从ActiveInspector方法调用返回的内容。

var mi;
var inspector = MyAddIn.Application.ActiveInspector();
if (inspector != null)
{
   // get existing
   mi = inspector.CurrentItem as MailItem;
}
else 
{
   // otherwise, create new one
   mi = MyAddIn.Application.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem);
 }

// now use it to attach file   
if (mi != null)
{
   mi.Attachments.Add(myFilePath);
} 

有关详细信息,请参阅How to: Programmatically Determine the Current Outlook Item