When you get a voice mail message from an Exchange 2007 unified messaging server, it gets a unique message type that allows Outlook 2007 and OWA 2007 to represent it as a voice mail. In the UC Metro class I’m teaching in Toronto, someone asked me whether it was possible to create a “fake” voice mail message– in other words, is there some way to create a message from an external application that appears to be a voice message in Exchange UM-aware clients? His question made sense given that his company makes applications that already do voice integration for various things, so I did some digging (by which I mean “I asked some folks on the UM team”). Here’s the deal.
Outlook and OWA use the PidTagMessageClass property to help them decide whether a message is a voice mail. I never would have known this except for the Voice Mail and Fax Objects Protocol Specification, part of the massive spec dump Microsoft unleashed last month. Section 18.104.22.168 explains the possible values for PidTagMessageClass; subsequent sections describe how you must prepare and attach the actual audio content to the message. However, the spec doesn’t explain exactly how to set the message class in the first place; to do that you’ll need to either have mad MAPI skillz (translation: pay Dimitri and use Redemption) or set it yourself using Exchange Web Services and the attribute documentation that tells you which properties have which tags. (Update: For real voicemails, the properties are set by the store’s content conversion engine when the message is accepted at the recipient mailbox. I haven’t tested to see what happens if you submit a message that meets the spec by using SMTP; it would be interesting to know if the properties are correctly applied in that case.)
In a related note, if you’ve ever wondered where the Outlook audio notes field data is stored, check out the PidNameAudioNotes attribute.
Update: each UM user has to have an Exchange Enterprise CAL. That means that anyone to whom you send synthetic VMs to has to have the Enteprise CAL as well, even if they’re not otherwise using UM.