Search code examples
mfcmapisendmailwinmail.dat

MAPISendMail with Outlook sometimes results in winmail.dat


I am using MAPISendMail() in an MFC application, and am having a problem that webmail clients sometimes receive a winmail.dat attachment, instead of the "real" attachments.

I have researched a lot, and have found that others are experiencing this problem too, but have not found a solution.

I believe that the problem may be in my MapiFileDesc structure, in which I leave the lpFileType member pointing to NULL, in order to have the mail program (In my case Outlook 2010) determine the file type automatically. lpFiletype is a MapiFileTagExt structure, and the documentation says this: A value of NULL indicates an unknown file type or a file type determined by the operating system.

So I believe this should work for common types, such as JPEG or GIF and such.

I read that the winmail.dat is caused by Outlook sending the mail encoded with the ms-tnef encoding, which is proprietary to Microsoft. However, when sending the email, Outlook shows "HTML" as highlighted, not RTF.

Has anyone encountered this problem and properly solved it?

Sending via SMTP and such is not an option, because the user should have a copy of the message in their Sent Items folder. Using the Outlook object model is not an option, because that would require the user has Outlook installed, and not any MAPI compatible client.


Solution

  • I was having similar issue.

    I found a KB article that has interesting information in "One-Off Addressing" section, saying that when address is provided in the format [SMTP:SMTP Address] - then e-mail is always sent in rich text format.

    For me the fix was not to set "Address" property of MapiRecipDesc object at all. Instead I put the address in Name property. The opening dialog then does not resolve the address at first, but it resolves it right before sending and then it is not sent in RTF!

    I even got it working with recipient's name together with address:

    MapiRecipDesc.Name = "Firstname Lastname <[email protected]>";