// Подключение к IMAP-серверу c параметрами private void Connect(string adress, string server, int port, string user, string pass, bool ssl) { try { // Создание соединения с сервером Client = new IMAPClient(server, port, ssl); // Аутентификация на сервере if (Client.Login(user, pass).Contains("OK")) { Client.ListCompleted += Client_ListCompleted; // Загрузка списка папок Client.List(); } else { throw new Exception("Ошибка подключения"); } IsConnected = true; } catch (Exception ex) { // Наступление события ошибки OnException(ex); // Загрузка списка папок из файла List <Folder> folders = MailStorage.LoadFolders(adress); // Наступление события подключен OnConnected(folders); } }
// Обработка завершения подключения к серверу входящей почты private void InputMail_OnConnected(List <Folder> folders) { if (currentMailBox != null) { currentMailBox.Folders = folders; // Сохранение списка папок в файл MailStorage.SaveFolders(currentMailBox); } }
// Обработка того, что список писем не загружен с сервера private void InputMail_OnNotLoadMessages() { // Загрузка списка писем из файла List <MyMailMessage> messages = MailStorage.LoadHeaders(currentMailBox); // Сортировка списка писем по убыванию даты List <MyMailMessage> sorted = messages.OrderByDescending(x => x.Date).ToList(); // Наступление события завершения загрузки списка писем InputMail_OnLoadedMessages(sorted); }
// Метод добавления тела письма из файла public void AddBody(MailBox box) { MyMailMessage mess = MailStorage.LoadBody(box); Body = mess.Body; IsBodyHtml = mess.IsBodyHtml; myAttachments = new List <MyAttachment>(); foreach (MyAttachment at in mess.myAttachments) { myAttachments.Add(new MyAttachment(at)); } }
// Обработка завершения загрузки списка писем private void InputMail_OnLoadedMessages(List <MyMailMessage> messanges) { if (currentMailBox != null) { if (currentMailBox.SelectedFolder != null) { currentMailBox.SelectedFolder.Messages = new List <MyMailMessage>(messanges); // Сохранение заголовков писем в файл MailStorage.SaveHeaders(currentMailBox); } } // Наступает событие готовности к отображению списка писем OnViewListMess(); }
// Метод загрузки списка писем public void LoadMessageList() { if (currentMailBox.SelectedFolder.Type == TYPE_FOLDER.DRAFTS || currentMailBox.SelectedFolder.Type == TYPE_FOLDER.TEMPLATE) { // Для папок черновиков и шаблонов // загружать список писем из файла List <MyMailMessage> messages = MailStorage.LoadHeaders(currentMailBox); InputMail_OnLoadedMessages(messages); } else { // Запуск загрузки списка писем из папки в параллельном потоке Thread inSlt = new Thread(new ParameterizedThreadStart(inputMail.LoadMessages)); inSlt.Start(currentMailBox.SelectedFolder.Pointer); } }
// Обработка загрузки письма private void InputMail_OnLoadedMessage(string answer) { if (currentMailBox != null) { if (currentMailBox.SelectedFolder != null) { if (currentMailBox.SelectedFolder.Message != null) { // Выбор адреса получателя, который будет отображаться первым MailAddress firstAddress = null; if (currentMailBox.SelectedFolder.Message.To.Where (e => e.Address.Equals(currentMailBox.MyAddress.Address, StringComparison.OrdinalIgnoreCase)).Count() > 0) { firstAddress = currentMailBox.SelectedFolder.Message.To.Where (e => e.Address.Equals(currentMailBox.MyAddress.Address, StringComparison.OrdinalIgnoreCase)).First(); } if (firstAddress != null) { // Перемещение выбранного адреса получателя в начало списка currentMailBox.SelectedFolder.Message.To.Remove(firstAddress); currentMailBox.SelectedFolder.Message.To.Insert(0, firstAddress); } if (answer == "Is_not_loaded_message") { // Если загрузить тело письма с сервера не удалось // получить тело письма из файла currentMailBox.SelectedFolder.Message.AddBody(currentMailBox); } else // Иначе получить тело письма из ответа сервера { currentMailBox.SelectedFolder.Message.AddBody(answer); } // Сохранение тела письма в файл MailStorage.SaveMessage(currentMailBox); foreach (MyAttachment attach in currentMailBox.SelectedFolder.Message.MyAttachments) { // Очистка памяти от вложений письма attach.Clear(); } } } } // Наступление события готовности письма к отображению OnViewMess(); }