// Метод сохранения текста загруженного письма с вложенными файлами public static void SaveMessage(MailBox box) { XmlElement folders = null; XmlElement messages = null; if (!File.Exists(filename)) { CreateXML(filename); } XmlDocument xd = new XmlDocument(); xd.Load(filename); XmlNodeList list = xd.DocumentElement.ChildNodes; // Выбор почтового ящика по адресу foreach (XmlNode node in list) { if (node.Attributes["address"].Value == box.MyAddress.Address) { folders = (XmlElement)node.LastChild; XmlNodeList fList = folders.ChildNodes; // Выбор папки по указателю foreach (XmlNode fld in fList) { if (fld.Attributes["pointer"].Value == box.SelectedFolder.Pointer) { messages = (XmlElement)fld.FirstChild; XmlNodeList messList = messages.ChildNodes; // Выбор письма по идентификатору foreach (XmlElement message in messList) { if (message.Attributes["id"].Value == box.SelectedFolder.Message.ID) { // Добавление тела письма MyMailMessage msg = box.SelectedFolder.Message; message.SetAttribute("body", msg.Body); message.SetAttribute("isHtml", msg.IsBodyHtml.ToString()); XmlElement attachments = (XmlElement)message.LastChild; XmlNodeList attachList = attachments.ChildNodes; if (attachList.Count == 0) { // Добавление вложений foreach (MyAttachment attach in msg.MyAttachments) { XmlElement attachment = xd.CreateElement("attachment"); attachment.SetAttribute("contenttype", attach.ContentTypeAt.ToString()); attachment.SetAttribute("content", attach.Content); attachment.SetAttribute("name", attach.Name); attachments.AppendChild(attachment); } } break; } } break; } } break; } } xd.Save(filename); }
// Подключение к IMAP-серверу с аргументом почтового ящика public void Connect(MailBox box) { Connect(box.MyAddress.Address, box.Settings.ImapServer, box.Settings.ImapPort, box.Settings.UserName, box.Settings.Rassword, box.Settings.Ssl); }
// Метод сохранения списка новых загруженных заголовков в файл // и удаление из файла отсутствующих на сервере писем public static void SaveHeaders(MailBox box) { XmlElement folders = null; XmlElement messages = null; if (!File.Exists(filename)) { CreateXML(filename); } XmlDocument xd = new XmlDocument(); xd.Load(filename); XmlNodeList list = xd.DocumentElement.ChildNodes; // Выбор почтового ящика по адресу foreach (XmlNode node in list) { if (node.Attributes["address"].Value == box.MyAddress.Address) { folders = (XmlElement)node.LastChild; XmlNodeList fList = folders.ChildNodes; // Выбор папки по указателю foreach (XmlNode fld in fList) { if (fld.Attributes["pointer"].Value == box.SelectedFolder.Pointer) { messages = (XmlElement)fld.FirstChild; XmlNodeList messList = messages.ChildNodes; // Удаление из файла писем отсутствующих на сервере foreach (XmlNode mess in messList) { if (!box.SelectedFolder.Messages.Exists(x => x.ID == mess.Attributes["id"].Value)) { messages.RemoveChild(mess); } } // foreach (MyMailMessage mssg in box.SelectedFolder.Messages) { XmlElement message = xd.CreateElement("message"); // Проверка по идентификатору отсутствие загруженного заголовка письма в файле bool isNotMessage = true; foreach (XmlNode msg in messList) { if (mssg.ID == msg.Attributes["id"].Value) { isNotMessage = false; } } // Загрузка нового письма в файл if (isNotMessage) { message.SetAttribute("id", mssg.ID); message.SetAttribute("header", mssg.Headers.Get("main")); XmlElement attachments = xd.CreateElement("attachments"); message.AppendChild(attachments); messages.AppendChild(message); } message.SetAttribute("num", mssg.Num.ToString()); } break; } } break; } } xd.Save(filename); }
// Подключение к IMAP-серверу в паралельном потоке public void Connect(object obj) { MailBox box = (MailBox)obj; Connect(box); }