2014-01-14 90 views
1

在我的場景中,我需要閱讀交換消息的MAPI屬性以獲取有關諸如名稱,大小等附件的信息。 對於嵌入式消息,我需要獲取更多信息。TNEF嵌入式消息格式

所以我的問題是如何閱讀嵌入式消息信息?

任何人都可以給我鏈接到關於如何閱讀Exchange服務器上的郵件的嵌入式消息的文章或規範文檔。 我使用以下類:

  • Microsoft.Exchange.Data.ContentTypes.Tnef.TnefReader
  • Microsoft.Exchange.Data.Transport.Email.EmailMessage

在這裏被簡化代碼:

EmailMessage email; 
MemoryStream mStream = new MemoryStream(File.ReadAllBytes(@"filename")); 

byte[] buffer; 
email = EmailMessage.Create(mStream); 
using (TnefReader reader = new TnefReader(email.TnefPart.GetContentReadStream())) 
{ 
    //loop through all properties 
    while (reader.ReadNextAttribute()) 
    { 
     if (reader.AttributeTag == TnefAttributeTag.Attachment) 
     { 
      bool IsEmbeddedMessage = false; 
      while (reader.PropertyReader.ReadNextProperty()) 
      { 

       switch (reader.PropertyReader.PropertyTag.Id) 
       { 

        case TnefPropertyId.AttachMethod: 
         IsEmbeddedMessage = reader.PropertyReader.ReadValueAsInt64() == 5; 
         break; 
        case TnefPropertyId.AttachData: 
         if (IsEmbeddedMessage) 
         { 
          // here i read embedded message content, 
          // but do not know how to read its TNEF properties 
          buffer = new byte[reader.PropertyReader.RawValueLength]; 
          reader.PropertyReader.ReadRawValue(buffer, 0, 
           reader.PropertyReader.RawValueLength); 
         } 
         break; 
        // .... 
       } 
      } 
     } 
    } 
} 

我知道我可以使用下面的代碼來獲得關於嵌入消息的一些信息:

email.Attachments[0].EmbeddedMessage 

但我需要使用類似於上面的代碼的方法,以獲得所有可能的屬性。

回答

0

想必你需要做這樣的事情,你讀過數據後:

using (var ereader = new TnefReader (new MemoryStream (buffer, false))) { 
    // now start all over again and read the properties... 
}