2013-05-06 51 views
3

我希望我的程序通过将MapiMessage传递给MAPISendMail来在用户最喜欢的电子邮件客户端中撰写传出电子邮件。电子邮件的元素(如主题)可作为不可变字符串(例如const char*)提供给我的程序。使用const_cast<LPSTR>将这些字符串的地址直接传递给MAPI实施是否被认为是“安全”?MAPI可以被不可变字符串信任吗?

我推测LPSTR只用于MAPI,因为API是非常古老的,几年前还没有普遍使用不可变字符串的做法,或者为什么它们需要可变。另一方面,也许有一个很好的理由,为什么字符串需要变化,我只是没有看到它。不幸的是,我一直无法找到许多信息来支持这一点,无论如何。

回答

1

我不认为这是安全的。来自MAPISEndMail文档 “如果没有信息丢失,则可以按原样发送消息,或者可以提示用户验证信息并在必要时更改值。MAPISendMailW和MAPISendMail都不同于MAPISendDocuments函数,因为它们允许更大的灵活性消息文本 消息文本 某些客户端应用程序可能会截断过长的主题行或包含回车,换行或表单提要。

这对我来说表明MapiMessage的成员可能会被改变。另外,MAPI不能比包含大量LPCSTR的Win32 SDK更古老。

我只是分配新的缓冲区并复制你的const字符串在调用MAPISendMail之前