IMAP rebex Время ожидания соединения с клиентом
У меня есть список уникальных ключей невидимых электронных писем, и моя текущая логика состоит в том, чтобы обрабатывать его в одном сеансе / соединении. Однако иногда сервер [rebex] вылетает и выдает ошибку *
Rebex.Net.ImapException: сервер закрыл соединение.
в нижней точке.
- client.GetMailMessage (unique_key); // получить информацию о конкретном письме из уникального ключа
Здесь он будет отмечать определенный статус электронной почты, хотя он генерирует ошибку. Таким образом, в следующий раз, если я попытаюсь получить информацию о невидимых электронных письмах, этот конкретный электронный ключ будет пропущен.
Здесь я исследовал несколько возможных способов
- Чтобы отметить эту ошибку, электронная почта невидима.
- Снова создайте соединение для этого конкретного электронного письма и получите информацию из этого.
- Сделайте IMAP-клиент синглтоном и, когда он выйдет из строя, создайте новый.
Есть ли более оптимизированные решения? Спасибо
2 ответа
Вы можете предотвратить GetMailMessage
от маркировки электронной почты, как видно с помощью Imap
объекты Settings.UsePeekForGetMessage
опция:
var imap = new Imap();
imap.Settings.UsePeekForGetMessage = true;
...
Как только вы решите пометить письмо как увиденное, используйте SetMessageFlags
метод:
imap.SetMessageFlags(unique_key, ImapFlagAction.Add, ImapMessageFlags.Seen);
Классический ответ - пометить сообщения как обработанные после обработки, а не до.
Что может привести к проблемам, если обработка определенного сообщения приводит к сбою. Человек не хочет восстанавливать связь и сразу же сталкивается с той же проблемой. Так что, возможно, ведите учет того, когда вы в последний раз пытались, и пробуйте сообщения, которые были самыми старыми.