Я хотел бы, чтобы моя программа составляла исходящую электронную почту в любимом почтовом клиенте пользователя, передавая MapiMessage в MAPISendMail. Элементы электронной почты, такие как тема, доступны для моей программы в виде неизменяемых строк (например, const char*
). Считается ли это «безопасным» для использования const_cast< LPSTR >
передать адреса этих строк непосредственно реализации MAPI?
Я полагаю, что LPSTR
используется в MAPI только потому, что API очень старый, и много лет назад не было распространенной практики использования неизменяемых строк, или существовала какая-то непонятная причина, почему они должны быть изменяемыми. С другой стороны, возможно, есть веская причина, почему строки должны быть изменяемыми, и я просто не вижу этого. К сожалению, я не смог найти много информации, чтобы поддержать это, так или иначе.
Я не думаю, что это безопасно. Из документации MAPISEndMail
«Если информация отсутствует, сообщение может быть отправлено как есть, или пользователю может быть предложено проверить информацию и при необходимости изменить значения.
И MAPISendMailW, и MAPISendMail отличаются от функции MAPISendDocuments тем, что они обеспечивают большую гибкость при генерации сообщений.
Текст сообщения
Некоторые клиентские приложения могут обрезать строки темы, которые являются слишком длинными или содержат возврат каретки, перевод строки или перевод формы. «
Для меня это означает, что члены MapiMessage могут быть изменены. Кроме того, MAPI не может быть более древним, чем Win32 SDK, который содержит множество LPCSTR.
Я бы просто выделил новые буферы и скопировал туда ваши константные строки перед вызовом MAPISendMail
Других решений пока нет …