使用 Outlook 的 MAPISendMail 有时会生成 winmail.dat

nam*_*ero 4 mfc mapisendmail winmail.dat

我在 MFC 应用程序中使用MAPISendMail(),但遇到一个问题:Webmail 客户端有时会收到 winmail.dat 附件,而不是“真实”附件。

我研究了很多,发现其他人也遇到这个问题,但没有找到解决方案。

我相信问题可能出在我的MapiFileDesc结构中,其中我将 lpFileType 成员保留为 NULL,以便让邮件程序(在我的例子中为 Outlook 2010)自动确定文件类型。 lpFiletype是一个MapiFileTagExt结构,文档是这样说的: NULL值表示未知的文件类型或由操作系统确定的文件类型。

所以我相信这应该适用于常见类型,例如 JPEG 或 GIF 等。

我读到 winmail.dat 是由 Outlook 发送使用ms-tnef编码编码的邮件引起的,该编码是 Microsoft 专有的。但是,发送电子邮件时,Outlook 将“HTML”显示为突出显示,而不是 RTF。

有谁遇到过这个问题并妥善解决了吗?

通过 SMTP 等发送不是一种选择,因为用户应该在其“已发送邮件”文件夹中拥有邮件的副本。使用 Outlook 对象模型不是一个选项,因为这需要用户安装 Outlook,而不是任何 MAPI 兼容客户端。

jtm*_*mnt 6

我有类似的问题。

我发现一篇知识库文章在“一次性寻址”部分提供了有趣的信息,其中指出当以 [SMTP:SMTP 地址] 格式提供地址时,电子邮件始终以富文本格式发送。

对我来说,解决方法是根本不设置 MapiRecipDesc 对象的“Address”属性。相反,我将地址放在 Name 属性中。打开的对话框一开始不会解析地址,但它会在发送之前解析地址,然后不会以 RTF 格式发送!

我什至将其与收件人的姓名和地址一起使用:

MapiRecipDesc.Name = "Firstname Lastname <mail@address.com>";
Run Code Online (Sandbox Code Playgroud)