Haifovchanin Ответов: 1

Активация mailsystem.net: функция selectmailbox может зависнуть


Я пишу приложение, которое обрабатывает электронные письма пользователей. При запуске приложение подключается к Gmail, а затем раз в минуту проверяет наличие новых писем.
Примерно через 12-20 часов приложение перестает обрабатывать новые электронные письма. Используя журналы, которые я нашел, эта строка
Mailbox mailBox = _gmailClient.SelectMailbox("inbox");
является последним исполняемым в этом коде.
Поскольку код не находится в блоке try / catch, я знаю, что это не сбой.

Пожалуйста, посоветуйте.
Спасибо.

Ниже приведена часть кода, которая извлекает новые электронные письма, где _gmailClient является Imap4Client() подключение к Gmail с помощью ConnectSsl("imap.gmail.com", 993)

OutputLog($"RetrieveAndProcessNewEmails - In locked code.");
if (!_gmailClient.IsConnected)
{
    OutputLog($"IMap client is not connected. Reconnecting...");
    if (!(ConnectIMap4Client("imap.gmail.com", 993, true) && LoginIMap4Client("email", "pass")))
        return;
}
OutputLog($"RetrieveAndProcessNewEmails - connected to GMail");
Mailbox mailBox = _gmailClient.SelectMailbox("inbox");
if (mailBox == null)
{
    OutputLog("Mailbox is null! Processing incoming emails is disabled");
    return;
}
OutputLog($"RetrieveAndProcessNewEmails - mailbox found: {MailBox2String(mailBox)}");
messages = mailBox.SearchParse("UNSEEN");
if (messages.Count == 0)
{
    OutputLog($"Currently there is no new messages...");
    return;
}
else
    OutputLog($"New {messages.Count} found.");


Что я уже пробовал:

Я уже задавал этот вопрос на GitHub, но ответа по-прежнему не было.

Richard Deeming

Если вы поддерживаете единственную связь в течение такого количества часов, возможно, это тайм-аут. Вы пробовали отключаться после каждого запуска?

Haifovchanin

Как я видел в лог-файле, соединение было разорвано, а затем мое приложение автоматически подключилось к Gmail. Примерно через 10 минут после того, как функция SelectMailbox зависла.
При повторном подключении я создаю новый экземпляр Imap4Client.
Кстати, время между повторным подключением и зависанием функции отличается от запуска к запуску.

Richard Deeming

Как я уже сказал, Я подозреваю, что было бы лучше открывать соединение, обрабатывать новые сообщения, а затем закрывать соединение каждый раз, а не пытаться держать соединение открытым в течение многих часов.

Haifovchanin

Понимать. Я постараюсь восстановить связь после каждого запроса.
Спасибо.

Haifovchanin

- Спасибо, Ричард. Вопрос решен.

1 Ответов

Рейтинг:
10

Richard Deeming

Как обсуждалось в комментариях, лучше открывать соединение, обрабатывать новые сообщения и закрывать соединение каждый раз, а не пытаться держать одно соединение открытым в течение многих часов.