【问题标题】:Outlook Redemption get stuck when calling RDOSession.LogOff调用 RDOSession.LogOff 时 Outlook 兑换卡住
【发布时间】:2019-11-21 05:12:43
【问题描述】:

我想从 Outlook 收件箱接收电子邮件。我在安装了 Outlook 2016 的 Windows 10 上使用最新版本的 Redemption 5.21.0.5378。

不幸的是,执行此操作的程序,我还没有写,我只是得到了让它工作的任务。我以前也没有使用过救赎。

这是代码(我删除了一些我认为不重要的行,如果您需要完整的方法,请说):

        AMS.Profile.Xml mailboxesxml;
        Redemption.RDOSession rdo;
        Redemption.RDOFolder inbox;
        Redemption.RDOMail msg;
        Redemption.RDOAttachment att;

        string[] mailboxes;

        try
        {
            mailboxesxml = new AMS.Profile.Xml(appPath + "mailboxes.xml");

            rdo = new Redemption.RDOSession();
            mailboxes = mailboxesxml.GetSectionNames();
            if (mailboxes != null) 
            {
                foreach (string me in mailboxes) {

                    sserver = mailboxesxml.GetValue(me, "server", "");
                    suser = mailboxesxml.GetValue(me, "user", ""); //Environment.UserName);
                    spassword = mailboxesxml.GetValue(me, "password", ""); 
                    sfolder = mailboxesxml.GetValue(me, "folder", "");
                    stargetdir = mailboxesxml.GetValue(me, "targetdirectory", appPath);
                    stargetdir = IncludeBackslash(stargetdir);
                    sfilename = mailboxesxml.GetValue(me, "filename", "$$EntryID$$");

                    //LOGON
                    rdo.LogonHostedExchangeMailbox(sserver, suser, spassword);
                    inbox = rdo.GetFolderFromPath(sfolder);


                    Redemption.RDOItems mails;
                    mails = inbox.Items;

                    while (mails.Count > 0) {

                        msg = mails.Item(1);
                        fn = "Test"
                        msg.SaveAs(fn, exportFormat); 


                        msg.MarkRead(true);
                        msg.Delete(Redemption.redDeleteFlags.dfHardDelete);
                        Marshal.ReleaseComObject(msg);

                    }
                    writeLog(@"cleanup...1", 2);
                    Marshal.ReleaseComObject(inbox);
                    writeLog(@"cleanup...2", 2);
                    Marshal.ReleaseComObject(mails);
                    writeLog(@"cleanup...3", 2);
                    GC.Collect();
                    writeLog(@"cleanup...4", 2);
                    rdo.Logoff();
                    writeLog(@"cleanup...5", 2);

                }
            }
            Marshal.ReleaseComObject(rdo);
            writeLog(@"cleanup...6", 2);

        }
        catch (Exception ex)
        {
            writeLog(@"error retrieving mails: " + ex, 0);
            GC.Collect();
        }
        finally
        {
            GC.Collect();
            writeLog(@"cleanup...7", 2);
        }

程序成功登录outlook,获取邮件,将邮件标记为已读并删除邮件。 但是当它调用 rdo.Logoff();方法,它只是卡住了,甚至没有抛出异常。

所以我从来没有收到“cleanup...5”日志。

也许它类似于这个问题? Process gets stuck in oSession.Logoff()

一些更相关的信息: 该应用程序是单线程的,它在第一次运行时发生。

谢谢

【问题讨论】:

    标签: mapi outlook-redemption


    【解决方案1】:

    尝试在调用 Logoff 之前调用 GC.Collect() - 当您调用 Logoff 时,您仍然有活动的 Redemption 对象(在内部引用各种 MAPI 对象)。

    您可能还想确定 RDOSession 以外的变量的范围,以确保 GC.Collect() 可以释放它们:

        Redemption.RDOSession rdo;
        try
        {
             MS.Profile.Xml mailboxesxml;
             Redemption.RDOFolder inbox;
             Redemption.RDOMail msg;
             Redemption.RDOAttachment att;
             string[] mailboxes;
             ...
        }
        catch (Exception ex)
        {
            writeLog(@"error retrieving mails: " + ex, 0);
            Marshal.ReleaseComObject(rdo);
            GC.Collect();
        }
        finally
        {
            GC.Collect();
            rdo.Logoff();
            Marshal.ReleaseComObject(rdo);
            writeLog(@"cleanup...7", 2);
        }
    

    【讨论】:

    • 不幸的是,这不起作用。程序在调用 rdo.Logoff() 时仍然卡住。我忘记停止程序,即使在 23 小时后,也没有执行注销。但是,当我没有使用rdo.LogonHostedExchangeMailbox 而是使用本地收件箱 (rdo.Logon(null,null,null,null,null,null)) 登录时,注销是有效的。但我需要访问另一个收件箱。
    • 这非常强烈地表明您仍然有出色的参考...您是否有一个显示问题的示例项目?
    • 因为这里不能设置文件,所以给你写了一封E-Mail。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-27
    • 1970-01-01
    • 2017-12-08
    • 1970-01-01
    相关资源
    最近更新 更多