private bool IsConnected = false; // Флаг подключения к серверу public void DragToSent(MailBox box) { try { string server = box.Settings.ImapServer; int port = box.Settings.ImapPort; bool ssl = box.Settings.Ssl; string user = box.Settings.UserName; string pass = box.Settings.Rassword; // Создание соединения с сервером Client = new IMAPClient(server, port, ssl); // Аутентификация на сервере if (Client.Login(user, pass).Contains("OK")) { IsConnected = true; int num = 0; if ((num = Client.MessInFolder("INBOX")) > 0) { if (Client.SelectFolder("INBOX").Contains("OK")) { string pointer = box.Folders.Where(x => x.Type == TYPE_FOLDER.SENT).First().Pointer; if (Client.Copy(pointer, num, num).Contains("OK")) { if (!Client.DeleteMessage(num)) { throw new Exception("Ошибка удаления письма. Удалите отправленное письмо из ящика INBOX"); } } else { throw new Exception("Ошибка копирования. Переместите отправленное письмо из ящика INBOX"); } } } } else { throw new Exception("Ошибка подключения. Отправленное письмо сохранено в папке INBOX"); } } catch (Exception ex) { // Наступление события ошибки OnException(ex); } }
// Загрузка списка писем в параллельном потоке public void LoadMessages(object obj) { int num = 0; string path = (string)obj; try { if (!IsConnected) { throw new Exception("Не подключен к серверу"); } // Получение количества писем в папке if ((num = Client.MessInFolder(path)) > 0) { // Выбор папки if (Client.SelectFolder(path).Contains("OK")) { Client.LoadTitleCompleted += Client_LoadTitleCompleted; // Загрузка заголовков писем Client.LoadTitleMessages(num); } else { throw new Exception("Ошибка выбора ящика"); } } else { OnLoadedMessages(new List <MyMailMessage>()); } } catch (Exception ex) { // Наступление события ошибки OnException(ex); // Наступление события список писем не загружен с сервера OnNotLoadMessages(); } }