Outlook错误MAPI\u E\u对象\u在Save()RDOEmail中更改

Outlook错误MAPI\u E\u对象\u在Save()RDOEmail中更改,outlook,outlook-redemption,Outlook,Outlook Redemption,调用Save()两次raice MAPI_E_OBJECT_更改了错误。奇怪的是,如果我在网格上选择另一封邮件,然后返回,然后再次选择第一封邮件,然后执行操作,它就可以正常工作了。这只发生在imap帐户上。 代码: public void updateEmailObject(bool链接) { Outlook.\u应用程序outlookApplication=null; Redemption.RDOMail rdoEmail=null; Redemption.RDOSession RDOSess

调用Save()两次raice MAPI_E_OBJECT_更改了错误。奇怪的是,如果我在网格上选择另一封邮件,然后返回,然后再次选择第一封邮件,然后执行操作,它就可以正常工作了。这只发生在imap帐户上。 代码:

public void updateEmailObject(bool链接)
{
Outlook.\u应用程序outlookApplication=null;
Redemption.RDOMail rdoEmail=null;
Redemption.RDOSession RDOSession=null;
RDOFolder文件夹=null;
RDOStores存储=null;
RDOStore存储=null;
RDOStore unwStore=null;
Outlook.Explorer outlookExplorer=null;
Outlook.MailItem selectedMail=null;
尝试
{
outlookApplication=新建Outlook.Application();
rdoSession=new Redemption.rdoSession();
object MAPIOBJECT=outlookApplication.Session.GetType().InvokeMember(“MAPIOBJECT”,BindingFlags.GetProperty,null,
outlookApplication.Session,null);
rdoSession.MAPIOBJECT=MAPIOBJECT;
outlookExplorer=outlookApplication.ActiveExplorer();
selectedMail=outlookExplorer.Selection.OfType().FirstOrDefault();
RDOMail rdoMailAux=rdoSession.GetRDOObjectFromOutlookObject(selectedMail,true)作为RDOMail;
folder=rdoMailAux.Parent作为RDOFolder;
发布对象元帅(rdoMailAux);
字符串storeId=folder.storeId;
stores=rdoSession.stores;
store=stores.GetStoreFromID(storeId);
unwStore=存储。展开存储(存储);
rdoEmail=unwStore.GetMessageFromID(selectedMail.EntryID,null);
字符串sGUID=PS_PUBLIC_STRINGS.ToString(“B”);
int iID=rdoEmail.GetIDsFromNames(sGUID,GMLINK);
如果(iID!=0)
{
rdoEmail.set_字段(iID,链接);
}
rdoEmail.Save();
}
最后
{
if(outlookApplication!=null)
{
Marshal.ReleaseComObject(了望应用程序);
}
如果(文件夹!=null)
{
Marshal.ReleaseComObject(文件夹);
}
如果(存储!=null)
{
Marshal.ReleaseComObject(存储);
}
如果(存储!=null)
{
Marshal.ReleaseComObject(存储);
}
if(unwStore!=null)
{
发布对象元帅(unwStore);
}
if(rdoEmail!=null)
{
Marshal.ReleaseComObject(rdoEmail);
}
if(outlookExplorer!=null)
{
Marshal.ReleaseComObject(Outlook Explorer);
}
if(rdoSession!=null)
{
Marshal.ReleaseComObject(rdoSession);
}
}
}

@DmitryStreblechenko@codenamezero您也遇到过类似的问题,对吗?如果您使用GetMessageFromId而不是GetRDOObjectFromOutlookObject,是否会使用相同的问题?是的。如果我从rdoSession调用GetMessageFromId(),我会得到相同的错误。@DmitryStreblechenko我正在使用Outlook 2016btw@DmitryStreblechenko@codenamezero您也有类似的问题,对吗?如果您使用GetMessageFromId而不是GetRDOObjectFromOutlookObject,是否会使用相同的问题?是的。如果我从rdoSession调用GetMessageFromId(),我会得到相同的错误。@DmitryStreblechenko我正在使用Outlook 2016 btw
public void UpdateMailObject(bool linked)
{
    Outlook._Application outlookApplication = null;
    Redemption.RDOMail rdoEmail = null;
    Redemption.RDOSession rdoSession = null;
    RDOFolder folder = null;
    RDOStores stores = null;
    RDOStore store = null;
    RDOStore unwStore = null;
    Outlook.Explorer outlookExplorer = null;
    Outlook.MailItem selectedMail = null;
    try
    {
        outlookApplication = new Outlook.Application();
        rdoSession = new Redemption.RDOSession();
        object MAPIOBJECT = outlookApplication.Session.GetType().InvokeMember("MAPIOBJECT", BindingFlags.GetProperty, null,
                outlookApplication.Session, null);
        rdoSession.MAPIOBJECT = MAPIOBJECT;
        outlookExplorer = outlookApplication.ActiveExplorer();
        selectedMail = outlookExplorer.Selection.OfType<Outlook.MailItem>().FirstOrDefault();

        RDOMail rdoMailAux = rdoSession.GetRDOObjectFromOutlookObject(selectedMail, true) as RDOMail;
        folder = rdoMailAux.Parent as RDOFolder;
        Marshal.ReleaseComObject(rdoMailAux);
        string storeId = folder.StoreID;
        stores = rdoSession.Stores;
        store = stores.GetStoreFromID(storeId);
        unwStore = stores.UnwrapStore(store);
        rdoEmail = unwStore.GetMessageFromID(selectedMail.EntryID, null);

        string sGUID = PS_PUBLIC_STRINGS.ToString("B");
        int iID = rdoEmail.GetIDsFromNames(sGUID, GMLINK);

        if (iID != 0)
        {
            rdoEmail.set_Fields(iID, linked);
        }

        rdoEmail.Save();
    }
    finally
    {
        if (outlookApplication != null)
        {
            Marshal.ReleaseComObject(outlookApplication);
        }
        if (folder != null)
        {
            Marshal.ReleaseComObject(folder);
        }
        if (stores != null)
        {
            Marshal.ReleaseComObject(stores);
        }
        if (store != null)
        {
            Marshal.ReleaseComObject(store);
        }
        if (unwStore != null)
        {
            Marshal.ReleaseComObject(unwStore);
        }
        if (rdoEmail != null)
        {
            Marshal.ReleaseComObject(rdoEmail);
        }
        if (outlookExplorer != null)
        {
            Marshal.ReleaseComObject(outlookExplorer);
        }

        if (rdoSession != null)
        {
            Marshal.ReleaseComObject(rdoSession);
        }
    }
}