IConverterSession :: MIMEtoMAPI无法使用Outlook 2016

时间:2017-10-05 18:29:28

标签: outlook mapi

以下函数使用IConverterSession从磁盘上的mhtm文件创建新消息。使用Outlook版本< 2016年的结果是一个html格式的消息,包括CSS样式和嵌入的图片。使用Outlook 2016,文件的原始MIME代码将作为文本正文...

添加到邮件中
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 个答案:

答案 0 :(得分:0)

一些事情:
1.你为什么打电话给SetEncoding? 2.如果要导入MIME文件,为什么还需要SetSaveFormat? 3. ulConvertFlags的价值是什么?你永远不会初始化那个变量。

您是否在OutlookSpy中看到了问题(点击IConverterSession | MIMEToMAPI)?

您可能还想将PR_MESSAGE_CLASS属性设置为" IPM.Note"第一