/// <summary> /// Gets the uncompressed RTF body of a message /// </summary> /// <param name="msg"></param> /// <returns></returns> public static byte[] GetBodyRtf(IMessage msg) { byte[] bodyRtf = null; IUnknown unk; Error hr = msg.OpenProperty(Tags.PR_RTF_COMPRESSED, IStream.IID, 0, 0, out unk); if (hr == Error.Success) { using (unk) { IStream compressedStream = (IStream)unk; using (compressedStream) { IStream uncompStream = null; hr = MAPI33.EDK.RTF.WrapCompressedRTFStream(compressedStream, 0, out uncompStream); if (hr == Error.Success) { using (uncompStream) { int bytesRead = 0; ArrayList streamContents = new ArrayList(); byte[] buffer = new byte[1024]; do { uncompStream.Read(buffer, (uint)buffer.Length, out bytesRead); if (bytesRead == buffer.Length) { streamContents.AddRange(buffer); } else { for (int idx = 0; idx < (int)bytesRead; idx++) { streamContents.Add(buffer[idx]); } } } while (bytesRead > 0); bodyRtf = (byte[])streamContents.ToArray(typeof(byte)); } } } } } return bodyRtf; }