无法确定文件夹中的Outlook项目类型

时间:2012-08-18 23:18:48

标签: c# outlook vsto outlook-addin outlook-2010

我正在尝试浏览Outlook文件夹并根据用户提供的特定条件(年龄,主题,内容)保存项目(SaveAs)。我遇到的问题是我无法确定文件夹中某些项目的类型。我正在使用

if( currentItem is MailItem )
  // do something
else if (currentItem is AppointmentItem)
  // do something else
// etc.

尝试确定类型并适当处理该项目。不幸的是,我发现几种类型似乎与我测试过的任何列出的类型都不匹配。使用 OutlookSpy ,我可以查看显示为类型53 OlObjectClass.olMeetingRequest的相关对象。这与MeetingItemAppointmentItem都不匹配,我似乎没有看到任何其他可能出现的类型。我找不到MeetingRequestItem或等价物。明显的方法,如GetType只说它是一个COM对象,到目前为止我找不到其他方法似乎可以做到这一点。

我已阅读VSTO for Office 2007,但它没有提供我能够找到的任何指导。我搜索过MSDN,这个网站上有很多其他人没有太多运气。另一个用户发布的问题类似,但没有任何答案。 VS2010能够弄清楚,因为您可以向监视列表添加动态强制转换,它会显示对象信息,它只是不会告诉您它是什么。

很抱歉问我看起来像是一个菜鸟问题,但我试图找出一个对象到Interop类型映射。如果有人有动态确定Outlook对象类型的方法,这将真的有帮助;我对此并没有太多运气......

1 个答案:

答案 0 :(得分:0)

会议请求,响应或更新以Outlook.MeetingItem的形式发送。您可以使用AppointmentItem访问基础MeetingItem.GetAssociatedAppointment()

以下是关于如何从AppointmentItem访问MeetingItem的{​​{3}}:

Outlook.Folder folder = Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox) as Outlook.Folder;
string filter = "[MessageClass] = 'IPM.Schedule.Meeting.Request'";
Outlook.Items items = folder.Items.Restrict(filter);
foreach (Outlook.MeetingItem request in items)
{
    Outlook.AppointmentItem appt =  request.GetAssociatedAppointment(false);
    if (appt != null)   
        Debug.WriteLine(appt.Subject);
}