IConverterSession :: MIMEtoMAPI不适用于Outlook 2016
问题描述:
以下函数使用IConverterSession从磁盘上的mhtm文件创建新消息。随着Outlook版本< 2016结果是一个HTML格式的消息,包括CSS样式和嵌入的图片。使用Outlook 2016年,文件的原始MIME代码添加到邮件的正文......IConverterSession :: MIMEtoMAPI不适用于Outlook 2016
HRESULT ImportEMLToIMessage
(
LPCWSTR lpszEMLFile,
LPMESSAGE lpMsg,
ULONG ulConvertFlags
)
{
HRESULT rv= S_OK;
if (lpszEMLFile&&lpMsg) {
// try to create an instance of the converter
// interface (CoCreateInstance/DllGetClassObject)
LPCONVERTERSESSION lpConverter = CreateConverterSession();
if (lpConverter) {
// open input stream
LPSTREAM lpEMLStm = NULL;
rv= MyOpenStreamOnFile(fctAllocateBuffer, fctFreeBuffer,
STGM_READ, lpszEMLFile, NULL, &lpEMLStm);
if (lpEMLStm&&SUCCEEDED(rv)) {
rv= lpConverter->SetEncoding(IET_QP);
if (SUCCEEDED(rv)) {
rv= lpConverter->SetSaveFormat(SAVE_RFC1521);
}
if (SUCCEEDED(rv)) {
rv= lpConverter->MIMEToMAPI(lpEMLStm, lpMsg, NULL, ulConvertFlags);
if (SUCCEEDED(rv)) {
rv= lpMsg->SaveChanges(NULL);
}
}
lpEMLStm->Release();
}
}
lpConverter->Release();
}
}
return rv;
}
有谁知道,如何让在Outlook 2016这个工作呢?谢谢。
答
几件事:
1.为什么要调用SetEncoding?
2.如果您要导入MIME文件,为什么需要SetSaveFormat?
3. ulConvertFlags的价值是什么?你永远不会初始化该变量。
您是否在OutlookSpy(点击IConverterSession | MIMEToMAPI)中看到问题?
您可能还想先将PR_MESSAGE_CLASS
属性设置为“IPM.Note”。
1,2)从一个相应的功能MAPIToMIME复制, 3)ulConvertFlags = CCSF_SMTP | CCSF_USE_RTF | CCSF_EMBEDDED_MESSAGE –
没有必要为1和2 3中,仅尝试CCSF_SMTP。你有没有在OutlookSpy中试过MIMEToMAPI? –