【问题标题】:Adding category to new mails向新邮件添加类别
【发布时间】:2012-04-10 05:43:25
【问题描述】:

我正在使用 COM 创建一个 VSTO 2007 插件。我的要求是将所有新邮件标记为蓝色类别。我在 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 时,即使我打开之前标记为蓝色类别的邮件,该类别也消失了。但是,我可以添加一个标志,每当我关闭和打开前景时都会出现。请提出问题

【问题讨论】:

    标签: com outlook vsto outlook-addin


    【解决方案1】:

    如果主类别列表中不存在该类别,我认为它不会保留它。将类别添加到主类别列表。更多信息请参阅http://msdn.microsoft.com/en-us/library/microsoft.office.interop.outlook.categories.aspx

    您的示例还将覆盖任何现有类别。您应该检查是否已指定类别,如果已指定,请用逗号分隔现有值和要添加的值。

    var existingCategories = item.Categories;
    if (string.IsNullOrWhiteSpace(existingCategories))
    {
        item.Categories = "MyCategory";
    }
    else
    {
        if (item.Categories.Contains("MyCategory") == false)
        {
            item.Categories = existingCategories + ", MyCategory";
        }
    }
    item.Save();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-30
      • 2021-03-22
      • 2012-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-20
      相关资源
      最近更新 更多