Fixing the Charset on MIME Messages When Using ADODB.Stream.ReadText

We had an issue recently where the customer had written an application to process MIME messages that had body parts encoded with the koi8-r charset…or at least that’s what it said: ——_=_NextPart_001_01C9F067.D9742103 Content-Type: text/plain; charset="koi8-r" Content-Transfer-Encoding: quoted-printable If you use code similar to the following, the resulting characters returned were not correct. private string ReadBodyPart()…


Parsing ServerVersion: When an Int Is Really 5 Ints

I recently had a case where a customer was asking how to figure out the mailbox version of a given user using Exchange Web Services (EWS). We noticed there is a node returned in the AutoDiscover response message called ServerVersion, but this value seems pretty opaque. Here’s a snippet from the AutoDiscover POX response from…


MimeContent vs Mime Content

Recently, I helped a customer with an issue where they were wondering if it was essential to set the ToRecipients, CcRecipients, and BccRecipients if they were setting the same values in the MimeContent property when doing a CreateItem call in Exchange Web Services. While trying to test out the scenarios, I thought “maybe it depends…


Exchange 2007 SP2 is Released

In case you missed it, Exchange 2007 SP2 was released this week. There are some cool new features, which the EHLO blog talks about here as well as all the bug fixes etc. One major thing to point out is that we no longer promote X- headers to custom properties on messages – though you…


Line Breaks in Managed Web Service Proxy Classes

Matt, Rick, and I were working on an issue recently where when an application using EWS would set a contact’s Street address to a value containing a carriage return and line feed, like this: physicalAddress.Street = “1234 56 Ave NE\r\nc/oPatrick Creehan”; the address card control in Outlook would render it like this: Ugly, right? The…


ConfigureMsgService fails with MAPI_E_INVALID_PARAMETER (0x80070057)

I recently helped a customer with an issue where they were calling ConfigureMsgService and that call was failing, returning an HRESULT of MAPI_E_INVALID_PARAMETER (0x80070057). After debugging it, we established that the reason that ConfigureMsgService was failing was that the PR_PROFILE_HOME_SERVER_ADDRS property was missing from the profile. Outlook seemed to work fine, logons worked, sending mail…


DeleteItem Ignores ChangeKeys

According to our documentation, DeleteItem calls should fail with a ErrorStaleObject error when the ChangeKey is not the most recent one. This, however, is not the case. In Exchange 2007, the ChangeKey is completely ignored in DeleteItem calls. This decision was made on the logic that if you are trying to delete an item, chances…


TNEF (Chapter 2): Old School

As discussed in Chapter 1 of this captivating series, MAPI contains an interface to allow developers to create and read TNEF data. This interface is the ITnef interface. There are only a few methods in this interface and they are, for the most part, self explanatory. The entire process of creating a TNEF stream can…


TNEF (Chapter 1): Basics

I’ve worked quite a few cases recently regarding problems some folks have had either reading or composing TNEF content. I’ve learned quite a bit myself as a result, and I thought I’d share. I decided I would do a series of blog posts on the topic and hopefully save some of you the time I…


New Drop of MAPI/CDO Download Released Today

After a hiccup earlier this week in getting the new MAPI & CDO downloads published to, they released today. MAPI / CDO CDO 1.21