【发布时间】: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()
一些更相关的信息: 该应用程序是单线程的,它在第一次运行时发生。
谢谢
【问题讨论】: