Outlook 2010 C++加载项 - HTML电子邮件正文检索

问题描述:

我正在编写Outlook 2010加载项,我的加载项根据每个电子邮件格式(纯文本/ HTML)将电子邮件附加到页脚,现在我刚刚发现当我启用Outlook“阅读电子邮件为纯文本”功能(http://support.microsoft.com/kb/831607)时,会发生问题,我的加载项将以纯文本形式接收HTML电子邮件,因此它会添加页脚并相应地保存它们,这是一个问题,因为之后保存为纯文本,电子邮件的实际HTML版本完全从Outlook中丢失。Outlook 2010 C++加载项 - HTML电子邮件正文检索

这里是我的代码(编辑为简洁起见):

void CConnect::OnNewItem(IDispatch* item) 
{ 
    if (item) 
    { 
     CComQIPtr<Outlook::_MailItem> mailItem(item); 

     OlBodyFormat bodyFormat; 
     mailItem->get_BodyFormat(&bodyFormat); 

     CComBSTR body; 
     if(bodyFormat == olFormatPlain) 
      mailItem->get_Body(&body); 
     if(bodyFormat == olFormatHTML) 
      mailItem->get_HTMLBody(&body); 

     //append the footer here 

     if(bodyFormat == olFormatPlain) 
      mailItem->put_Body(newBody); 
     if(bodyFormat == olFormatHTML) 
      mailItem->put_HTMLBody(newBody); 

     mailItem->Save(); 
     mailItem->Release(); 
    } 
} 

我也试图让邮件的HTML正文不管他们的格式实际上是,但我得到的纯文本版本生成的HTML版本,因此所有原始的CSS和格式都会丢失。

我需要的是一种能够在Outlook“阅读电子邮件为纯文本”功能时检索原始HTML版本的方式,任何帮助将不胜感激。

有点过时,但是刚才看到现在这样......

你可能会需要下降到了MAPI水平正常做到这一点。例如:

LPMESSAGE MapiMessage; 
HRESULT ResultCode = HrGetOneProp(MapiMessage, PR_HTML, &PropertiesValues); 
LPSBinary HtmlBodyProperty = (LPSBinary)&PropertiesValues->Value.bin; 

将MAPI支持集成到您的插件中并不像有些人想象的那样痛苦。一个好的起点是“Using MAPI to Create Outlook 2007 Items”。

+0

谢谢,这就是我最终做的。 – rad 2012-11-08 12:56:32