0
我正在使用COM创建VSTO 2007 Addin。我的要求是将所有新邮件标记为蓝色类别。我执行后OnNewMailEx处理将类别添加到新邮件
HRESULT hrGetNewMail;
_NameSpacePtr pMAPI = NULL;
hrGetNewMail = spApp->GetNamespace((_bstr_t)GetStringFromTable(147),&pMAPI);
if(FAILED(hrGetNewMail))
{
if(spApp!=NULL)
spApp.Release();
return OPERATION_FAILED;
}
if(spApp!=NULL)
spApp.Release();
CComBSTR EntryStoreID;
MAPIFolderPtr spMAPIFolder = NULL;
hrGetNewMail = pMAPI->GetDefaultFolder (olFolderInbox, &spMAPIFolder);
if(FAILED(hrGetNewMail))
{
if(pMAPI!=NULL)
pMAPI.Release();
return OPERATION_FAILED;
}
hrGetNewMail = spMAPIFolder->get_StoreID (&EntryStoreID);
if(FAILED(hrGetNewMail))
{
if(spMAPIFolder!=NULL)
spMAPIFolder.Release();
if(pMAPI!=NULL)
pMAPI.Release();
}
if(spMAPIFolder!=NULL)
spMAPIFolder.Release();
VARIANT varEntryStoreID;
hrGetNewMail = EntryStoreID.CopyTo (&varEntryStoreID);
if(FAILED(hrGetNewMail))
{
return OPERATION_FAILED;
}
IDispatch* spLatestMailitem;
hrGetNewMail = pMAPI->GetItemFromID (EntryID,varEntryStoreID,&spLatestMailitem);
if(FAILED(hrGetNewMail))
{
if(pMAPI!=NULL)
pMAPI.Release();
}
if(pMAPI!=NULL)
pMAPI.Release();
CComQIPtr <Outlook::_MailItem> spMailItem;
hrGetNewMail=spLatestMailitem->QueryInterface(&spMailItem);
HRESULT hrCat = spMailItem->put_Categories(_T("Blue Category"));
//spMailItem->put_FlagIcon(olRedFlagIcon);
hrCat = spMailItem->Save();
下面的代码时,我打开新邮件它显示的类别为蓝色,但在没有标记任何类别的收件箱。当我关闭并打开Outlook时,即使打开之前标记为蓝色类别的邮件,类别也不会显示。不过,只要我关闭并打开展望,我就可以添加一个旗帜。请提出问题