// Метод сохранения текста загруженного письма с вложенными файлами
        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);
        }