TNEF 嵌入式邮件格式



在我的方案中,我需要读取交换邮件的 MAPI 属性以获取有关附件的信息,如名称、大小等。对于嵌入式消息,我需要获取更多信息。

所以我的问题是如何读取嵌入的消息信息?

任何人都可以给我有关如何在Exchange服务器上读取邮件的嵌入式邮件的文章或规范文档的链接。我使用以下类:

  • Microsoft.Exchange.Data.ContentTypes.Tnef.TnefReader
  • Microsoft.交换.数据.运输.电子邮件.电子邮件消息

以下是简化的代码:

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

但是我需要使用类似于上述代码的方法才能获得所有可能的属性。

大概你需要在读取数据后做这样的事情:

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

最新更新