关于c#:使用CreateItemFromTemplate处理olEmbeddeditem Outlook附件

关于c#:使用CreateItemFromTemplate处理olEmbeddeditem Outlook附件

Using CreateItemFromTemplate to process an olEmbeddeditem Outlook attachment

我正在使用C#处理Outlook收件箱中包含附件的邮件。附件之一是olEmbeddeditem类型。我需要能够处理该附件的内容。据我所知,我需要将附件保存到磁盘上,并使用CreateItemFromTemplate来返回对象。

我的问题是olEmbeddeditem可以是任何Outlook对象类型MailItem,ContactItem,MeetingItem等。您如何知道特定olEmbeddeditem附件将是哪种对象类型,以便您知道将要使用的对象由CreateItemFromTemplate返回?

或者,如果有更好的方法将olEmbeddeditem附件内容放入对象进行处理,我也将对此开放。


我在Google网上论坛上找到了以下代码来确定Outlook对象的类型:

1
2
3
4
5
6
7
8
9
Type t = SomeOutlookObject.GetType();
string messageClass = t.InvokeMember("MessageClass",
  BindingFlags.Public |
  BindingFlags.GetField |
  BindingFlags.GetProperty,
  null,
  SomeOutlookObject,
  new object[]{}).ToString();
Console.WriteLine("\\tType:" + messageClass);

我不知道这对olEmbedded项是否有帮助,但似乎可以识别常规消息,日历项等。


使用也是电子邮件的电子邮件附件,这些附件又包含我要访问的用户定义的属性,然后执行以下步骤:

1
2
3
4
5
6
7
8
9
10
Outlook.Application mailApplication = new Outlook.Application();
Outlook.NameSpace mailNameSpace = mailApplication.GetNamespace("mapi");
// make sure it is an embedded item
If(myAttachment.Type == Outlook.OlAttachmentType.olEmbeddeditem)
{
    myAttachment.Type.SaveAsFile("temp.msg");
    Outlook.MailItem attachedEmail = (Outlook.MailItem)mailNameSpace.OpenSharedItem("temp.msg");
    String customProperty = attachedEmail.PropertyAccessor.GetProperty(
       "http://schemas.microsoft.com/mapi/string/{00020329-0000-0000-c000-000000000046}/myProp
}

如果使用打开邮件项,那么我将无法访问上述属性:

1
Outlook.MailItem attachedEmail = (Outlook.MailItem)mailApplication.CreateFromTemplate("temp.msg");

推荐阅读