Я хочу получать электронные письма из почтового ящика Outlook. Я использую новейшую версию Redemption 5.21.0.5378 в Windows 10 с установленным Outlook 2016.
К сожалению, Программа, которая делает это, я не написал, я просто получил задачу, чтобы она заработала. Я также не использовал Redemption раньше.
Вот код (я удалил несколько строк, которые, я думаю, не важны, если вам нужен полный метод, просто скажите):
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".
Может, это что-то похожее на этот вопрос? Процесс застревает в oSession.Logoff ()
Еще одна важная информация: приложение является однопоточным и происходит при первом запуске.
Спасибо