2017-10-05 67 views
0

以下函数使用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这个工作呢?谢谢。

回答

0

几件事:
1.为什么要调用SetEncoding?
2.如果您要导入MIME文件,为什么需要SetSaveFormat?
3. ulConvertFlags的价值是什么?你永远不会初始化该变量。

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

您可能还想先将PR_MESSAGE_CLASS属性设置为“IPM.Note”。

+0

1,2)从一个相应的功能MAPIToMIME复制, 3)ulConvertFlags = CCSF_SMTP | CCSF_USE_RTF | CCSF_EMBEDDED_MESSAGE –

+0

没有必要为1和2 3中,仅尝试CCSF_SMTP。你有没有在OutlookSpy中试过MIMEToMAPI? –

相关问题