diff --git a/MailComponent/Mail/InternetMail.cs b/MailComponent/Mail/InternetMail.cs old mode 100755 new mode 100644 index cb53ab9..2574c4c --- a/MailComponent/Mail/InternetMail.cs +++ b/MailComponent/Mail/InternetMail.cs @@ -14,6 +14,13 @@ This Source Code Form is subject to the terms of the namespace OneScript.InternetMail { + /// + /// Предназначен для доступа к почтовым серверам для отправки и получения сообщений (писем). + /// Использует наиболее распространенные Интернет протоколы SMTP, POP3 и IMAP. + /// Не требует установленного почтового клиента и, если почтовый клиент все же установлен, работает с ним(-и) параллельно. + /// Для протоколов IMAP, POP3 и SMTP поддерживается работа по SSL, но без возможности проверки сертификата клиента или сервера. + /// Важно! Если почтовый сервер не поддерживает работу с идентификаторами, то в качестве идентификаторов используются ИдентификаторСообщения писем. + /// [ContextClass("ИнтернетПочта", "InternetMail")] public class InternetMail : AutoContext, IDisposable { @@ -28,6 +35,11 @@ public InternetMail() { } + /// + /// Содержит разделитель, используемый для разделения папок в иерархии папок. + /// Разделитель настраивается на сервере IMAP. + /// На клиенте свойство указывает, какой разделитель нужно использовать при адресации иерархии папок. + /// [ContextProperty("СимволРазделитель", "DelimiterChar")] public string DelimiterChar { @@ -42,6 +54,12 @@ public string DelimiterChar } } + /// + /// Содержит текущий почтовый ящик на сервере, с которым выполняется работа. + /// Данное свойство влияет на методы ПолучитьЗаголовки, ПолучитьИдентификаторы, УдалитьСообщения, ПолучитьКоличествоСообщений, Послать + /// для случая, когда используется протокол отправки IMAP. + /// Если свойство не задано, то действие будет производиться с IMAP почтовым ящиком "Входящие" ("Inbox"). + /// [ContextProperty("ТекущийПочтовыйЯщик", "CurrentMailbox")] public string CurrentMailbox { @@ -70,6 +88,14 @@ private void LogoffSmtp() #endregion + /// + /// Осуществляет подключение к почтовому серверу для получения/посылки почты. + /// + /// Профиль пользователя для подключения к почтовому серверу. + /// Задаёт, какой тип соединения нужно использовать при подключении к Интернет почте. + /// Если требуется использовать IMAP, то нужно указать соответствующий тип. + /// Значение по умолчанию: POP3. + /// [ContextMethod("Подключиться", "Logon")] public void Logon(InternetMailProfile profile, InternetMailProtocol receiveMailProtocol = InternetMailProtocol.Pop3) { @@ -108,6 +134,9 @@ public void Logon(InternetMailProfile profile, InternetMailProtocol receiveMailP } + /// + /// Производит отключение от почтового сервера. После отключения посылка и получение сообщений с сервера не доступны. + /// [ContextMethod("Отключиться", "Logoff")] public void Logoff() { @@ -115,10 +144,20 @@ public void Logoff() receiver?.Logoff(); } + /// + /// Посылает сообщение типа ИнтернетПочтовоеСообщение. + /// + /// Почтовое сообщение. + /// Обрабатывает тексты перед отправкой. + /// Значение по умолчанию: Обрабатывать. + /// Определяет тип протокола отправки. Допустимые варианты IMAP или SMTP. + /// Указание POP3 приведет к возникновению исключения. + /// Значение по умолчанию: SMTP. + /// [ContextMethod("Послать", "Send")] public void Send(InternetMailMessage message, - InternetMailTextProcessing processText = InternetMailTextProcessing.Process, - InternetMailProtocol protocol = InternetMailProtocol.Smtp) + InternetMailTextProcessing processText = InternetMailTextProcessing.Process, + InternetMailProtocol protocol = InternetMailProtocol.Smtp) { if (protocol == InternetMailProtocol.Pop3) { @@ -138,90 +177,249 @@ public void Send(InternetMailMessage message, sender?.Send(message, processText); } + /// + /// Формирует массив, содержащий объекты типа ИнтернетПочтовоеСообщение. Каждый объект содержит только следующие поля: + /// - Заголовок, + /// - Размер, + /// - ИдентификаторСообщения, + /// - Тема, + /// - Отправитель, + /// - ОбратныйАдрес, + /// - Получатели, + /// - СлепыеКопии, + /// - ДатаОтправления. + /// Выбираются заголовки всех сообщений, находящихся на сервере. + /// + /// В качестве ключей структуры используются названия свойств письма, по которым осуществляется отбор. + /// Значения могут быть выражения следующих типов: Строка, Дата, Число, Булево. + /// Тип значения определяется ключом. Например, если требуется отобрать письма до определённой даты, то в качестве значения необходимо использовать выражения типа Дата. + /// Если в качестве значения используется строка, то регистр не имеет значения. + /// Если заданы несколько ключей, то они применяются последовательно по логическому И. + /// Если в структуре передано неподдерживаемое значение ключа, оно игнорируется, ошибки при этом не возникает. + /// + /// - ОтправленОтвет (Answered) - Булево. Отобрать сообщения, у которых установлен флаг – Answered; + /// - Недавние (Recent) - Булево. Отобрать сообщения, пришедшие в рамках текущей IMAP-сессии. + /// - СлепыеКопии (Bcc) - Строка. Отобрать сообщения, которые имеют “строка” в поле Bcc; + /// - Копии (Cc) - Строка. Отобрать сообщения, которые имеют “строка” в поле Cc; + /// - Получатели (To) - Строка. Отобрать сообщения, которые имеют “строка” в поле To; + /// - ДатаОтправления (PostDating) - Дата. Отобрать сообщения, у которых значение поле Date: равно “Дата”; + /// - Отправитель (From) - Строка. Отобрать все сообщения у которых встречается “строка”в поле From; + /// - ДоДатыОтправления (BeforeDateOfPosting) - Дата. Отобрать сообщения, у которых значение поле Date: перед “дата”; + /// - ПослеДатыОтправления (AfterDateOfPosting) - Дата. Отобрать сообщения, у которых значение поля Date: после значения “Дата”; + /// - Тема (Subject) - Строка. Отобрать сообщения, в заголовке которых встречается заданная строка; + /// - Текст (Text) - Строка. Отобрать сообщения, в любых текстовых полях которого встречается заданная строка; + /// - ТелоСообщения (Body) - Строка. Отобрать сообщения, в теле которых встречается строка – “строка”; + /// - Удаленные (Deleted) - Булево. Отобрать сообщения, которые должны быть удалены или не должны быть удалены; + /// - УстановленФлаг (Flagged) - Булево. Отобрать сообщения, которые помечены флагом или не помечены флагом; + /// - Прочитанные (Seen) - Булево. Отобрать сообщения, которые были прочитаны или не прочитаны; + /// - Новые (New) - Булево. Отобрать новые или старые сообщения. + /// Пример: + /// + /// ПараметрыОтбораIMAP =НовыйСтруктура; + /// ПараметрыОтбораIMAP.Вставить("Новые",Истина); + /// ПараметрыОтбораIMAP.Вставить("Тема", "привет"); + /// Почта.ПолучитьЗаголовки(ПараметрыОтбораIMAP); + /// + /// Строковые значения критериев отбора отправляются в кодировке US-ASCII, если содержат только символы ANSI и в кодировке UTF-8 - в противном случае. Не все IMAP-серверы поддерживают UTF-8, поэтому сервер может выдать соответствующую ошибку. + /// [ContextMethod("ПолучитьЗаголовки", "GetHeaders")] public ArrayImpl GetHeaders(StructureImpl filter = null) { return receiver?.GetHeaders(filter); } + /// + /// Возвращает массив, содержащий идентификаторы всех или новых сообщений, находящихся в почтовом ящике на сервере. + /// Внимание! Фильтрация заголовков работает только при работе по протоколу IMAP. + /// При работе по протоколу POP3 отбор писем не выполняется - метод вернет полный массив сообщений, даже если установлены ПараметрыОтбора. + /// + /// Для получения всех идентификаторов сообщений из почтового ящика необходимо передать пустой массив. + /// Если же надо получить идентификаторы только новых сообщений, то необходимо передать массив, заполненный ранее полученными идентификаторами (свойство Идентификатор). + /// В качестве ключей структуры используются названия свойств письма, по которым осуществляется отбор. + /// Значения могут быть выражения следующих типов: Строка, Дата, Число, Булево. + /// Тип значения определяется ключом. Например, если требуется отобрать письма до определённой даты, то в качестве значения необходимо использовать выражения типа Дата. + /// Если в качестве значения используется строка, то регистр не имеет значения. + /// Если заданы несколько ключей, то они применяются последовательно по логическому И. + /// + /// - ОтправленОтвет (Answered) - Булево. Отобрать сообщения, у которых установлен флаг – Answered; + /// - Недавние (Recent) - Булево. Отобрать сообщения, пришедшие в рамках текущей IMAP-сессии. + /// - СлепыеКопии (Bcc) - Строка. Отобрать сообщения, которые имеют “строка” в поле Bcc; + /// - Копии (Cc) - Строка. Отобрать сообщения, которые имеют “строка” в поле Cc; + /// - Получатели (To) - Строка. Отобрать сообщения, которые имеют “строка” в поле To; + /// - ДатаОтправления (PostDating) - Дата. Отобрать сообщения, у которых значение поле Date: равно “Дата”; + /// - Отправитель (From) - Строка. Отобрать все сообщения у которых встречается “строка”в поле From; + /// - ДоДатыОтправления (BeforeDateOfPosting) - Дата. Отобрать сообщения, у которых значение поле Date: перед “дата”; + /// - ПослеДатыОтправления (AfterDateOfPosting) - Дата. Отобрать сообщения, у которых значение поля Date: после значения “Дата”; + /// - Тема (Subject) - Строка. Отобрать сообщения, в заголовке которых встречается заданная строка; + /// - Текст (Text) - Строка. Отобрать сообщения, в любых текстовых полях которого встречается заданная строка; + /// - ТелоСообщения (Body) - Строка. Отобрать сообщения, в теле которых встречается строка – “строка”; + /// - Удаленные (Deleted) - Булево. Отобрать сообщения, которые должны быть удалены или не должны быть удалены; + /// - УстановленФлаг (Flagged) - Булево. Отобрать сообщения, которые помечены флагом или не помечены флагом; + /// - Прочитанные (Seen) - Булево. Отобрать сообщения, которые были прочитаны или не прочитаны; + /// - Новые (New) - Булево. Отобрать новые или старые сообщения. + /// Пример: + /// + /// ПараметрыОтбораIMAP =НовыйСтруктура; + /// ПараметрыОтбораIMAP.Вставить("Новые",Истина); + /// ПараметрыОтбораIMAP.Вставить("Тема", "привет"); + /// Почта.ПолучитьЗаголовки(ПараметрыОтбораIMAP); + /// + /// Строковые значения критериев отбора отправляются в кодировке US-ASCII, если содержат только символы ANSI и в кодировке UTF-8 - в противном случае. + /// Не все IMAP-серверы поддерживают UTF-8, поэтому сервер может выдать соответствующую ошибку. + /// [ContextMethod("ПолучитьИдентификаторы", "GetIdentifiers")] public ArrayImpl GetIdentifiers(ArrayImpl identifiers = null, StructureImpl filter = null) { return receiver?.GetIdentifiers(identifiers, filter); } + /// + /// Получает количество сообщений IMAP в текущем почтовом ящике (ТекущийПочтовыйЯщик) или количество сообщений в ящике POP3. + /// + /// [ContextMethod("ПолучитьКоличествоСообщений", "GetMessageCount")] public int GetMessageCount() { return receiver?.GetMessageCount() ?? 0; } + /// + /// При работе с POP3 удаляет с сервера все сообщения, указанные либо объектами ИнтернетПочтовоеСообщение, либо идентификаторами, находящимися в массиве, принимаемом в качестве параметра. + /// При работе с IMAP помечает как удаленные на сервере все сообщения, указанные одним из следующих способов: + /// + /// - объектами ИнтернетПочтовоеСообщение, + /// - идентификаторами, находящимися в массиве, принимаемом в качестве параметра, + /// - порядковыми номерами сообщений в текущем почтовом ящике, заданном свойством ТекущийПочтовыйЯщик. + /// Помеченные сообщения можно окончательно удалить методом ОчиститьУдаленныеСообщения или снять отметку удаления с помощью метода ОтменитьУдалениеСообщений. + /// + /// [ContextMethod("УдалитьСообщения", "DeleteMessages")] public void DeleteMessages(ArrayImpl dataToDelete) { receiver?.DeleteMessages(dataToDelete); } + /// + /// Получает массив имен всех почтовых ящиков на сервере для данной учётной записи. + /// + /// [ContextMethod("ПолучитьПочтовыеЯщики", "GetMailBoxes")] public ArrayImpl GetMailboxes() { return receiver?.GetMailboxes(); } + /// + /// Получить список всех почтовых ящиков, которые помечены как подписанные. + /// + /// [ContextMethod("ПолучитьПочтовыеЯщикиПоПодписке", "GetMailBoxesBySubscription")] public ArrayImpl GetMailboxesBySubscription() { return receiver?.GetMailboxesBySubscription(); } + /// + /// Подписать почтовый ящик IMAP для дальнейшей работы с ним. + /// + /// Имя IMAP почтового ящика. [ContextMethod("ПодписатьсяНаПочтовыйЯщик", "SubscribeToMailbox")] public void SubscribeToMailbox(string name) { receiver?.SubscribeToMailbox(name); } + /// + /// Отозвать подписку на IMAP почтовый ящик. + /// + /// Имя IMAP почтового ящика. [ContextMethod("ОтменитьПодпискуНаПочтовыйЯщик", "UnsubscribeFromMailbox")] public void UnsubscribeFromMailbox(string name) { receiver?.UnsubscribeFromMailbox(name); } + /// + /// Снимает пометку удаления для IMAP письма. Позволяет отменить действия метода УдалитьСообщения. + /// + /// Cодержит либо заголовки сообщений, либо серверные идентификаторы сообщений, + /// либо массив порядковых номеров почтовых сообщений, для которых необходимо отменить действие удаления с сервера. [ContextMethod("ОтменитьУдалениеСообщений", "UndeleteMessages")] public void UndeleteMessages(ArrayImpl deletedData) { receiver?.UndeleteMessages(deletedData); } + /// + /// Удаляет из текущего почтового ящика IMAP все письма, которые были помечены для удаления. + /// [ContextMethod("ОчиститьУдаленныеСообщения", "ClearDeletedMessages")] public void ClearDeletedMessages() { receiver?.ClearDeletedMessages(); } + /// + /// Выполняет переименование почтового ящика. + /// + /// Имя почтового ящика, которое требуется переименовать. + /// Новое имя, которое будет назначено почтовому ящику. [ContextMethod("ПереименоватьПочтовыйЯщик", "RenameMailbox")] public void RenameMailbox(string name, string newName) { receiver?.RenameMailbox(name, newName); } + /// + /// Создает IMAP почтовый ящик по заданному имени. Ящик создаётся от корня. Имя может содержать иерархический путь к почтовому ящику. + /// Символ-разделитель иерархии почтовых ящиков, используемый текущим почтовым сервером, доступен с помощью свойства СимволРазделитель. + /// + /// Имя почтового ящика. Может содержать иерархию. + /// В качестве разделителя используется символ, который доступен через свойство СимволРазделитель. + /// В большинстве случаев это символ '/'. [ContextMethod("СоздатьПочтовыйЯщик", "CreateMailbox")] public void CreateMailbox(string name) { receiver?.CreateMailbox(name); } + /// + /// При работе с POP3 удаляет с сервера все сообщения, указанные либо объектами ИнтернетПочтовоеСообщение, либо идентификаторами, находящимися в массиве, принимаемом в качестве параметра. + /// При работе с IMAP помечает как удаленные на сервере все сообщения, указанные одним из следующих способов: + /// + /// - объектами ИнтернетПочтовоеСообщение, + /// - идентификаторами, находящимися в массиве, принимаемом в качестве параметра, + /// - порядковыми номерами сообщений в текущем почтовом ящике, заданном свойством ТекущийПочтовыйЯщик. + /// Помеченные сообщения можно окончательно удалить методом ОчиститьУдаленныеСообщения или снять отметку удаления с помощью метода ОтменитьУдалениеСообщений. + /// + /// Массив, содержащий либо заголовки сообщений, либо серверные идентификаторы сообщений, которые необходимо удалить с сервера. + /// Для варианта работы с IMAP протоколом также допускается передать массив порядковых номеров сообщений (целые числа) в текущем почтовом ящике (ТекущийПочтовыйЯщик). + /// [ContextMethod("УдалитьПочтовыйЯщик", "DeleteMailbox")] public void DeleteMailbox(string name) { receiver?.DeleteMailbox(name); } + /// + /// Используется для получения сообщений с сервера. + /// + /// Истина - удалять выбранные сообщения с сервера. + /// Значение по умолчанию: Истина. + /// Массив, содержащий либо заголовки сообщений, либо серверные идентификаторы сообщений, которые необходимо получить. + /// Для IMAP соединения массив может содержать порядковые номера сообщений в текущем почтовом ящике (см. ТекущийПочтовыйЯщик). + /// Значение по умолчанию: Пустой массив. + /// Отмечать письма на сервере как прочтенные. + /// Актуален только для IMAP, для протокола POP3 единственное допустимое значение - Истина. + /// Значение по умолчанию: Истина. + /// [ContextMethod("Выбрать", "Get")] public ArrayImpl Get(bool? deleteMessages = null, ArrayImpl ids = null, bool? markAsRead = null) { return receiver?.Get(deleteMessages ?? true, ids, markAsRead ?? true); } + /// public void Dispose() { smtpClient.Dispose(); diff --git a/MailComponent/Mail/InternetMailAddress.cs b/MailComponent/Mail/InternetMailAddress.cs old mode 100755 new mode 100644 index f52f924..4dd7fc2 --- a/MailComponent/Mail/InternetMailAddress.cs +++ b/MailComponent/Mail/InternetMailAddress.cs @@ -11,9 +11,15 @@ This Source Code Form is subject to the terms of the namespace OneScript.InternetMail { + /// + /// Адрес для обмена почтовыми сообщениями. + /// [ContextClass("ИнтернетПочтовыйАдрес", "InternetMailAddress")] public class InternetMailAddress : AutoContext { + /// + /// Полный адрес электронной почты в формате "пользователь@сервер". + /// [ContextProperty("Адрес", "Address")] public string Address { @@ -29,15 +35,30 @@ public string Address } } + /// + /// Содержит кодировку для отображаемых имен. + /// Если кодировка не указана, будет использоваться значение кодировки из свойства Кодировка, объекта ИнтернетПочтовоеСообщение. + /// [ContextProperty("Кодировка", "Encoding")] public string Encoding { get; set; } + /// + /// Содержит представление почтового адреса. + /// Произвольный текст, сопоставляемый почтовому адресу, указанному в свойстве Адрес. + /// Используется почтовыми клиентами при разборе сообщения в качестве отображаемого имени получателя, отправителя и т.д. + /// [ContextProperty("ОтображаемоеИмя", "DisplayName")] public string DisplayName { get; set; } + /// + /// Часть "пользователь" почтового адреса. + /// [ContextProperty("Пользователь", "User")] public string User { get; set; } + /// + /// Часть "сервер" почтового адреса. + /// [ContextProperty("Сервер", "Server")] public string Server { get; set; } diff --git a/MailComponent/Mail/InternetMailAddresses.cs b/MailComponent/Mail/InternetMailAddresses.cs old mode 100755 new mode 100644 index d5108e6..200ee76 --- a/MailComponent/Mail/InternetMailAddresses.cs +++ b/MailComponent/Mail/InternetMailAddresses.cs @@ -12,6 +12,9 @@ This Source Code Form is subject to the terms of the namespace OneScript.InternetMail { + /// + /// Представляет собой коллекцию объектов типа ИнтернетПочтовыйАдрес. + /// [ContextClass("ИнтернетПочтовыеАдреса", "InternetMailAddresses")] public class InternetMailAddresses : AutoContext, ICollectionContext, IEnumerable { @@ -33,6 +36,11 @@ IEnumerator IEnumerable.GetEnumerator() return GetEnumerator(); } + /// + /// Добавляет адрес в коллекцию. + /// + /// Почтовый адрес. + /// [ContextMethod("Добавить", "Add")] public InternetMailAddress Add(string address) { @@ -43,24 +51,41 @@ public InternetMailAddress Add(string address) return newAddress; } + /// + /// Получает количество элементов в коллекции почтовых адресов. + /// + /// [ContextMethod("Количество", "Count")] public int Count() { return _data.Count; } + /// + /// Удаляет все элементы коллекции. + /// [ContextMethod("Очистить", "Clear")] public void Clear() { _data.Clear(); } + /// + /// Получает значение по индексу. Работает аналогично оператору []. + /// + /// Индекс элемента коллекции. + /// [ContextMethod("Получить", "Get")] public InternetMailAddress Get(int index) { return _data[index]; } + /// + /// Удаляет элемент из коллекции. + /// + /// Индекс элемента коллекции или элемент коллекции. + /// [ContextMethod("Удалить", "Delete")] public void Delete(IValue element) { diff --git a/MailComponent/Mail/InternetMailAttachment.cs b/MailComponent/Mail/InternetMailAttachment.cs old mode 100755 new mode 100644 index 223a23f..06d2d8c --- a/MailComponent/Mail/InternetMailAttachment.cs +++ b/MailComponent/Mail/InternetMailAttachment.cs @@ -11,6 +11,9 @@ This Source Code Form is subject to the terms of the namespace OneScript.InternetMail { + /// + /// Вложение в почтовое сообщение представляет собой двоичные данные. + /// [ContextClass("ИнтернетПочтовоеВложение", "InternetMailAttachment")] public class InternetMailAttachment : AutoContext { @@ -27,24 +30,48 @@ public InternetMailAttachment(string fileName) FileName = System.IO.Path.GetFileName(fileName); } + /// + /// Содержит данные почтового вложения. + /// [ContextProperty("Данные", "Data")] public IValue Data { get; set; } + /// + /// Идентификатор вложения. + /// [ContextProperty("Идентификатор", "CID")] public string CID { get; set; } + /// + /// Наименование вложения в сообщении. Используется в пользовательском интерфейсе. + /// [ContextProperty("Имя", "Name")] public string Name { get; set; } + /// + /// Имя файла вложения. + /// [ContextProperty("ИмяФайла", "FileName")] public string FileName { get; } + /// + /// Содержит кодировку для наименования вложения. + /// Если кодировка не указана, будет использоваться значение кодировки из свойства Кодировка, объекта ИнтернетПочтовоеСообщение. + /// [ContextProperty("Кодировка", "Encoding")] public string Encoding { get; set; } + /// + /// Содержит способ кодирования вложений сообщения. По умолчанию используется метод MIME. + /// [ContextProperty("СпособКодирования", "EncodingMode")] public InternetMailAttachmentEncodingMode EncodingMode { get; set; } + /// + /// Содержит MIME тип вложения. + /// Если свойство при отправке сообщения не заполнено, то производится попытка автоматически определить MIME тип вложения. + /// Если автоматически определить тип не получилось, для такого вложения используется тип "application/octet-stream". + /// [ContextProperty("ТипСодержимого", "MIMEType")] public string MimeType { get; set; } } diff --git a/MailComponent/Mail/InternetMailAttachmentEncodingMode.cs b/MailComponent/Mail/InternetMailAttachmentEncodingMode.cs old mode 100755 new mode 100644 index e6587fd..dd84f5a --- a/MailComponent/Mail/InternetMailAttachmentEncodingMode.cs +++ b/MailComponent/Mail/InternetMailAttachmentEncodingMode.cs @@ -10,13 +10,22 @@ This Source Code Form is subject to the terms of the namespace OneScript.InternetMail { + /// + /// Описывает способ кодирования вложений почтового сообщения. + /// [EnumerationType("СпособКодированияИнтернетПочтовогоСообщения", "InternetMailAttachmentEncodingMode")] public enum InternetMailAttachmentEncodingMode { + /// + /// Кодирование вложений способом MIME. + /// [EnumItem("MIME", "МИМЕ")] Mime, + /// + /// Кодирование вложений способом UUEncode. + /// [EnumItem("UUEncode", "УУЕнкоде")] Uuencode diff --git a/MailComponent/Mail/InternetMailAttachments.cs b/MailComponent/Mail/InternetMailAttachments.cs old mode 100755 new mode 100644 index 29218b9..7b2b9a3 --- a/MailComponent/Mail/InternetMailAttachments.cs +++ b/MailComponent/Mail/InternetMailAttachments.cs @@ -13,6 +13,9 @@ This Source Code Form is subject to the terms of the namespace OneScript.InternetMail { + /// + /// Коллекция почтовых вложений. + /// [ContextClass("ИнтернетПочтовыеВложения", "InternetMailAttachments")] public class InternetMailAttachments : AutoContext, ICollectionContext, IEnumerable { @@ -22,6 +25,10 @@ public InternetMailAttachments() private readonly List _data = new List(); + /// + /// Получает размер коллекции почтовых вложений. + /// + /// [ContextMethod("Количество", "Count")] public int Count() { @@ -70,6 +77,13 @@ public InternetMailAttachment Add(InternetMailMessage data, string attachmentNam } + /// + /// Добавляет вложение + /// + /// Адрес файла-вложения. + /// Имя вложения, которое отображают почтовые клиенты. + /// + /// [ContextMethod("Добавить", "Add")] public InternetMailAttachment Add(IValue source, string attachmentName = "") { @@ -83,18 +97,31 @@ public InternetMailAttachment Add(IValue source, string attachmentName = "") throw RuntimeException.InvalidArgumentType(nameof(source)); } + /// + /// Удаляет все элементы коллекции. + /// [ContextMethod("Очистить", "Clear")] public void Clear() { _data.Clear(); } + /// + /// Получает значение по индексу. Работает аналогично оператору []. + /// + /// Индекс элемента коллекции. + /// [ContextMethod("Получить", "Get")] public InternetMailAttachment Get(int index) { return _data[index]; } + /// + /// Удаляет почтовое вложение из коллекции. + /// + /// Индекс элемента коллекции или элемент коллекции. + /// [ContextMethod("Удалить", "Delete")] public void Delete(IValue element) { diff --git a/MailComponent/Mail/InternetMailMessage.cs b/MailComponent/Mail/InternetMailMessage.cs old mode 100755 new mode 100644 index 3f30b43..764b24d --- a/MailComponent/Mail/InternetMailMessage.cs +++ b/MailComponent/Mail/InternetMailMessage.cs @@ -14,6 +14,9 @@ This Source Code Form is subject to the terms of the namespace OneScript.InternetMail { + /// + /// Почтовое сообщение (письмо). + /// [ContextClass("ИнтернетПочтовоеСообщение", "InternetMailMessage")] public class InternetMailMessage : AutoContext { @@ -55,7 +58,7 @@ private static HeaderList GenerateHeadersList(MailKit.IMessageSummary headers) { headerList.Add("Sender", CcAddress.ToString()); } - headerList.Add("Subject", headers.Envelope.Subject); + headerList.Add("Subject", headers.Envelope.Subject ?? ""); if (headers.Envelope.Date != null) { @@ -124,104 +127,277 @@ public InternetMailMessage(MimeMessage nativeMessage, string identifier) : this( } } + /// + /// Коллекция адресов, на которые будет высылаться уведомление о доставке. + /// [ContextProperty("АдресаУведомленияОДоставке", "DeliveryReceiptAddresses")] public InternetMailAddresses DeliveryReceiptAddresses { get; } + /// + /// Коллекция адресов, на которые будет высылаться уведомление о прочтении. + /// [ContextProperty("АдресаУведомленияОПрочтении", "ReadReceiptAddresses")] public InternetMailAddresses ReadReceiptAddresses { get; } + /// + /// Содержит важность почтового сообщения. + /// [ContextProperty("Важность", "Importance")] public InternetMailMessageImportance Importance { get; set; } + /// + /// Содержит коллекцию объектов ИнтернетПочтовоеВложение. + /// [ContextProperty("Вложения", "Attachments")] public InternetMailAttachments Attachments { get; } + /// + /// Дата отправления письма. Значение представлено датой, локальной для почтового клиента отправителя. + /// [ContextProperty("ДатаОтправления", "PostingDate")] public DateTime PostingDate { get; private set; } + /// + /// Дата получения письма. Имеет смысл только для полученных писем. + /// [ContextProperty("ДатаПолучения", "DateReceived")] public DateTime DateReceived { get; private set; } + /// + /// Содержит заголовок сообщения в том виде, в котором письмо хранится на сервере. + /// [ContextProperty("Заголовок", "Header")] public string Header { get; private set; } + /// + /// Содержит строку, идентифицирующую сообщение. + /// Данный идентификатор сообщения уникален в пределах почтового ящика и остается неизменным на протяжении + /// всего времени существования этого сообщения в почтовом ящике на сервере. + /// После объединения частичных сообщений, результирующее сообщение может содержать несколько идентификаторов, + /// поэтому свойство имеет тип Массив. + /// [ContextProperty("Идентификатор", "Uid")] public ArrayImpl Uid { get; } + /// + /// Уникальный идентификатор письма. + /// [ContextProperty("ИдентификаторСообщения", "MessageId")] public string MessageId { get; private set; } + /// + /// Содержит имя отправителя письма. + /// [ContextProperty("ИмяОтправителя", "SenderName")] public string SenderName { get; set; } + /// + /// Указываются категории, к которым относится сообщение. Категория может быть как одна, так и несколько, разделенных запятыми. Например: + /// + /// Сообщение = Новый ИнтернетПочтовоеСообщение; + /// Сообщение.Категории = "Личное, Поздравления, Подарки"; + /// + /// [ContextProperty("Категории", "Categories")] public string Categories { get; set; } + /// + /// Содержит кодировку всего сообщения, включая тему, отображаемые имена, тексты и наименования вложений, + /// если для этих частей сообщения кодировка не указана. + /// По умолчанию используется UTF8. + /// [ContextProperty("Кодировка", "Encoding")] public string Encoding { get; set; } + /// + /// Содержит коллекцию объектов ИнтернетПочтовыйАдрес. + /// [ContextProperty("Копии", "Cc")] public InternetMailAddresses Cc { get; } + /// + /// Содержит коллекцию объектов ИнтернетПочтовыйАдрес. + /// Используется в случае, когда адресант хочет получить ответ от адресата на другой адрес, + /// отличный от того, с которого отправляется письмо. + /// [ContextProperty("ОбратныйАдрес", "ReplyTo")] public InternetMailAddresses ReplyTo { get; } + /// + /// Поле заголовка. Может заполняться отправителем почтового сообщения. + /// [ContextProperty("Организация", "Organization")] public string Organization { get; } + /// + /// Отправитель сообщения. + /// [ContextProperty("Отправитель", "Sender")] public IValue Sender { get; set; } + /// + /// Содержит коллекцию объектов ИнтернетПочтовыйАдрес. + /// [ContextProperty("Получатели", "To")] public InternetMailAddresses To { get; } + /// + /// Размер сообщения. Может не совпадать с реальным размером сообщения. + /// [ContextProperty("Размер", "Size")] public int Size { get; } + /// + /// Содержит коллекцию объектов ИнтернетПочтовыйАдрес. + /// [ContextProperty("СлепыеКопии", "Bcc")] public InternetMailAddresses Bcc { get; } + /// + /// Смещение даты отправления от универсального времени (UTC) в секундах. Для часовых поясов, отстающих от UTC, значение отрицательное. + + /// Пример приведения даты отправления к дате в часовом поясе сеанса: + /// ДатаОтправленияВЗонеОтправителя = Сообщение.ДатаОтправления;  + /// + /// СмещениеОтправителя = Сообщение.СмещениеДатыОтправления; + /// + /// // Дата отправления сообщения, приведенная к UTC + /// ДатаОтправлениеUTC = ДатаОтправленияВЗонеОтправителя - СмещениеОтправителя; + /// + /// ЧасовойПояс = ЧасовойПоясСеанса();  + /// + /// // Смещение времени получателя относительно UTC на дату отправки письма с учетом + /// // смещения летнего времени + /// СмещениеПолучателя = СмещениеСтандартногоВремени(ЧасовойПояс, ДатаОтправлениеUTC) +  + /// СмещениеЛетнегоВремени(ЧасовойПояс, ДатаОтправлениеUTC); + /// + /// // Дата отправления, приведенная к дате получателя. Смещение рассчитано на момент + /// // отправления сообщения + /// ЛокальнаяДатаОтправления = ДатаОтправленияВЗонеОтправителя + (СмещениеПолучателя – СмещениеОтправителя); + /// + /// Пример приведения даты отправления к дате в часовом поясе компьютера. + /// ДатаОтправленияВЗонеОтправителя = Сообщение.ДатаОтправления;  + /// СмещениеОтправителя = Сообщение.СмещениеДатыОтправления; + /// + /// // Дата отправления сообщения, приведенная к UTC + /// ДатаОтправлениеUTC = ДатаОтправленияВЗонеОтправителя - СмещениеОтправителя; + /// + /// ЧасовойПояс = ЧасовойПояс();  + /// + /// // Смещение времени получателя относительно UTC на дату отправки письма с учетом + /// // смещения летнего времени + /// СмещениеПолучателя = СмещениеСтандартногоВремени(ЧасовойПояс, ДатаОтправлениеUTC) +  + /// СмещениеЛетнегоВремени(ЧасовойПояс, ДатаОтправлениеUTC); + /// + /// // Дата отправления, приведенная к дате получателя. Смещение рассчитано на момент + /// // отправления     сообщения + /// ЛокальнаяДатаОтправления = ДатаОтправленияВЗонеОтправителя + (СмещениеПолучателя – СмещениеОтправителя); + /// + /// [ContextProperty("СмещениеДатыОтправления", "PostingDateOffset")] public decimal PostingDateOffset { get; private set; } + /// + /// Содержит способ кодирования не ASCII символов сообщения. При создании объекта значение свойства MIME. + /// [ContextProperty("СпособКодированияНеASCIIСимволов", "NonAsciiSymbolsEncodingMode")] public InternetMailMessageNonAsciiSymbolsEncodingMode NonAsciiSymbolsEncodingMode { get; set; } + /// + /// Содержит статус разбора исходного текста почтового сообщения. + /// Если свойство имеет значение ОбнаруженыОшибки, то это означает, что во время разбора в структуре сообщения + /// были найдены ошибки и объект ИнтернетПочтовоеСообщение сформирован по данным, которые удалось успешно распознать. + /// [ContextProperty("СтатусРазбора", "ParseStatus")] public InternetMailMessageParseStatus ParseStatus { get; } + /// + /// Содержит коллекцию объектов ИнтернетТекстПочтовогоСообщения. + /// Может содержать одно или несколько текстовых частей сообщения или не содержать ни одной текстовой части. + /// [ContextProperty("Тексты", "Texts")] public InternetMailTexts Texts { get; } - [ContextProperty("Тема", "Theme")] - public string Theme { get; set; } + /// + /// Тема сообщения. + /// + [ContextProperty("Тема", "Subject")] + public string Subject { get; set; } = ""; + [Obsolete] + [ContextProperty("Theme")] + public string ObsoleteTheme { get => Subject; + set => Subject = value; + } + + /// + /// Уведомить о доставке почтового сообщения. Значение по умолчанию - Ложь. + /// Истина - уведомление необходимо. + /// [ContextProperty("УведомитьОДоставке", "RequestDeliveryReceipt")] public bool RequestDeliveryReceipt { get; set; } + /// + /// Уведомить о прочтении почтового сообщения. Значение по умолчанию - Ложь. + /// Истина - уведомление необходимо. + /// [ContextProperty("УведомитьОПрочтении", "RequestReadReceipt")] public bool RequestReadReceipt { get; } + /// + /// Показывает, является ли сообщение частичным (в случае, если большое сообщение было разбито на части). + /// Истина - сообщение частично. + /// [ContextProperty("Частичное", "Partial")] public bool Partial { get; } + /// + /// Производит предварительную обработку текстов письма, с возможностью последующего изменения содержимого текстов. + /// [ContextMethod("ОбработатьТексты", "ProcessTexts")] public void ProcessTexts() { } + /// + /// Возвращает исходные данные почтового сообщения. + /// Если сообщение принято с сервера (с помощью метода Выбрать объекта ИнтернетПочта) и не было изменено, + /// то возвращаемые методом данные соответствуют тем, которые были получены с сервера. + /// Если объект ИнтернетПочтовоеСообщение создан программно или получен с сервера и был изменен, + /// то данные генерируются на основе содержимого этого объекта, в том виде, + /// в каком они готовились к передаче почтовому серверу при отправке. + /// + /// [ContextMethod("ПолучитьИсходныеДанные", "GetSourceData")] public BinaryDataContext GetSourceData() { return null; } + /// + /// Возвращает исходный текст почтового сообщения. + /// Если сообщение принято с сервера (с помощью метода Выбрать объекта ИнтернетПочта) и не было изменено, + /// то возвращаемый методом текст соответствуют тексту, полученному с сервера + /// Если объект ИнтернетПочтовоеСообщение создан программно или получен с сервера и был изменен, + /// то текст генерируется на основе содержимого этого объекта. + /// + /// + /// [ContextMethod("ПолучитьИсходныйТекст", "GetSourceText")] public string GetSourceText(IValue encoding) { return ""; } + /// + /// Получает значение требуемого поля. + /// + /// Имя получаемого поля из главного заголовка сообщения. + /// Имя может состоять только из печатных символов набора ASCII (т.е. из символов с номерами от 33 до 126 включительно), + /// за исключением символа "двоеточие" (":"). + /// Данный диапазон содержит все буквы английского алфавита (как строчные, так и заглавные) и несколько специальных символов. + /// Указывается тип возвращаемого значения поля. Значение переданного объекта остается без изменения. + /// [ContextMethod("ПолучитьПолеЗаголовка", "GetField")] public IValue GetField(string fieldName, IValue type) { @@ -229,11 +405,25 @@ public IValue GetField(string fieldName, IValue type) return ValueFactory.Create(value); } + /// + /// Устанавливает исходные данные сообщения и инициализирует на основе них объект типа ИнтернетПочтовоеСообщение. + /// В случае ошибки разбора указанных данных генерируетcя исключение. + /// + /// Исходные данные почтового сообщения. [ContextMethod("УстановитьИсходныеДанные", "SetSourceData")] public void SetSourceData(BinaryDataContext data) { } + /// + /// Добавляет пользовательское поле в главный заголовок почтового сообщения. Текстовые данные будут конвертироваться в кодировку, заданную свойством Кодировка. + /// + /// Имя поля помещаемого в главный заголовок сообщения. + /// Имя может состоять только из печатных символов набора ASCII (т.е. из символов диапазона от 33 до 126 включительно), + /// за исключением символа "двоеточие" (":"). + /// Данный диапазон содержит все буквы английского алфавита (как строчные, так и прописные) и несколько специальных символов. + /// Значение добавляемого поля. + /// Способ кодирования поля в заголовке. Если параметр не задан, будет использоваться значение из свойства СпособКодированияНеASCIIСимволов. [ContextMethod("УстановитьПолеЗаголовка", "SetField")] public void SetField(string fieldName, IValue value, InternetMailMessageNonAsciiSymbolsEncodingMode? encodingMode = null) { @@ -265,7 +455,7 @@ public void SetField(string fieldName, IValue value, InternetMailMessageNonAscii SenderName = stringValue; else if (fieldName.Equals("Subject", StringComparison.InvariantCultureIgnoreCase)) - Theme = stringValue; + Subject = stringValue; } public MimeMessage CreateNativeMessage(InternetMailTextProcessing processText = InternetMailTextProcessing.Process) @@ -276,7 +466,7 @@ public MimeMessage CreateNativeMessage(InternetMailTextProcessing processText = var messageToSend = new MimeMessage(); if (Sender.DataType == DataType.String) - messageToSend.From.Add(new MailboxAddress("", Sender.AsString())); + messageToSend.From.Add(new MailboxAddress(SenderName, Sender.AsString())); else if (Sender is InternetMailAddress) messageToSend.From.Add((Sender as InternetMailAddress).GetInternalObject()); else @@ -292,22 +482,36 @@ public MimeMessage CreateNativeMessage(InternetMailTextProcessing processText = messageToSend.ReplyTo.Add(replyTo.GetInternalObject()); } - messageToSend.Subject = Theme; + messageToSend.Subject = Subject; - if (Texts.Count() == 1) + var body = new Multipart(); + foreach (var text in Texts) { - messageToSend.Body = Texts.Get(0).CreateTextPart(); + var part = text.CreateTextPart(); + body.Add(part); } - else { - var body = new Multipart(); - foreach (var text in Texts) + + if (Attachments.Count() > 0) { + foreach (InternetMailAttachment attachment in Attachments) { - var part = text.CreateTextPart(); - body.Add(part); + var mimeattachment = new MimePart() + { + ContentObject = new ContentObject(((BinaryDataContext) attachment.Data.AsObject()).OpenStreamForRead().GetUnderlyingStream(), ContentEncoding.Default), + ContentDisposition = new ContentDisposition(ContentDisposition.Attachment), + ContentTransferEncoding = ContentEncoding.Base64, + FileName = attachment.FileName + }; + if (String.IsNullOrEmpty(attachment.FileName)) + { + mimeattachment.FileName = attachment.Name; + } + + body.Add(mimeattachment); } - messageToSend.Body = body; } + messageToSend.Body = body; + return messageToSend; } diff --git a/MailComponent/Mail/InternetMailMessageImportance.cs b/MailComponent/Mail/InternetMailMessageImportance.cs old mode 100755 new mode 100644 index 5d614bd..fac6457 --- a/MailComponent/Mail/InternetMailMessageImportance.cs +++ b/MailComponent/Mail/InternetMailMessageImportance.cs @@ -10,21 +10,39 @@ This Source Code Form is subject to the terms of the namespace OneScript.InternetMail { + /// + /// Содержит варианты важности почтового сообщения. + /// [EnumerationType("ВажностьИнтернетПочтовогоСообщения", "InternetMailMessageImportance")] public enum InternetMailMessageImportance { + /// + /// Высокая важность сообщения. + /// [EnumItem("Высокая", "High")] High, + /// + /// Наивысшая важность сообщения. + /// [EnumItem("Наивысшая", "Highest")] Highest, + /// + /// Наименьшая важность сообщения. + /// [EnumItem("Наименьшая", "Lowest")] Lowest, + /// + /// Низкая важность сообщения. + /// [EnumItem("Низкая", "Low")] Low, + /// + /// Обычная важность сообщения. + /// [EnumItem("Обычная", "Normal")] Normal } diff --git a/MailComponent/Mail/InternetMailMessageNonASCIISymbolsEncodingMode.cs b/MailComponent/Mail/InternetMailMessageNonASCIISymbolsEncodingMode.cs old mode 100755 new mode 100644 index 780548b..92430c4 --- a/MailComponent/Mail/InternetMailMessageNonASCIISymbolsEncodingMode.cs +++ b/MailComponent/Mail/InternetMailMessageNonASCIISymbolsEncodingMode.cs @@ -9,15 +9,28 @@ This Source Code Form is subject to the terms of the namespace OneScript.InternetMail { + /// + /// Содержит варианты способов кодирования не ASCII символов в почтовом сообщении. + /// [EnumerationType("СпособКодированияНеASCIIСимволовИнтернетПочтовогоСообщения", "InternetMailMessageNonASCIISymbolsEncodingMode")] public enum InternetMailMessageNonAsciiSymbolsEncodingMode { + /// + /// Кодируются методом MIME. + /// [EnumItem("MIME", "МИМЕ")] Mime, + /// + /// Кодируются методом Quoted-Printable. + /// [EnumItem("QuotedPrintable", "Кодировать")] QuotedPrintable, + /// + /// Все поля заголовков, содержащие не ASCII символы кодироваться не будут. + /// Все символы будут конвертироваться в кодировку, заданною свойством Кодировка. + /// [EnumItem("БезКодирования", "None")] None } diff --git a/MailComponent/Mail/InternetMailMessageParseStatus.cs b/MailComponent/Mail/InternetMailMessageParseStatus.cs old mode 100755 new mode 100644 index caa5ccc..f0a6456 --- a/MailComponent/Mail/InternetMailMessageParseStatus.cs +++ b/MailComponent/Mail/InternetMailMessageParseStatus.cs @@ -10,12 +10,23 @@ This Source Code Form is subject to the terms of the namespace OneScript.InternetMail { + /// + /// Содержит виды статусов разбора почтового сообщения: + /// - ОбнаруженыОшибки - ошибки в структуре письма при разборе были обнаружены ошибки. Объект ИнтернетПочтовоеСообщение может содержать ошибки. + /// - ОшибокНеОбнаружено - при разборе письма ошибки обнаружены не были. + /// [EnumerationType("СтатусРазбораПочтовогоСообщения", "InternetMailMessageParseStatus")] public enum InternetMailMessageParseStatus { + /// + /// При разборе почтового сообщения обнаружены ошибки. Некоторые поля сообщения могут быть не заполнены. + /// [EnumItem("ОбнаруженыОшибки", "ErrorsDetected")] ErrorsDetected, + /// + /// При разборе почтового соощения ошибок обнаружено не было. + /// [EnumItem("ОшибокНеОбнаружено", "ErrorsNotDetected")] ErrorsNotDetected } diff --git a/MailComponent/Mail/InternetMailProfile.cs b/MailComponent/Mail/InternetMailProfile.cs old mode 100755 new mode 100644 index 6ade397..df78687 --- a/MailComponent/Mail/InternetMailProfile.cs +++ b/MailComponent/Mail/InternetMailProfile.cs @@ -11,6 +11,9 @@ This Source Code Form is subject to the terms of the namespace OneScript.InternetMail { + /// + /// Набор свойств для соединения с сервером. + /// [ContextClass("ИнтернетПочтовыйПрофиль", "InternetMailProfile")] public class InternetMailProfile : AutoContext { @@ -19,63 +22,134 @@ public InternetMailProfile() Timeout = 30; } + /// + /// Способ аутентификации, когда подключение к SMTP серверу происходит после успешного подключения к POP3 серверу. + /// Значение по умолчанию - Ложь. + /// [ContextProperty("POP3ПередSMTP", "POP3BeforeSMTP")] public bool Pop3BeforeSmtp { get; set; } + /// + /// Содержит хост имя IMAP сервера. + /// [ContextProperty("АдресСервераIMAP", "IMAPServerAddress")] public string ImapServerAddress { get; set; } + /// + /// Адрес POP3 сервера. + /// [ContextProperty("АдресСервераPOP3", "POP3ServerAddress")] public string Pop3ServerAddress { get; set; } + /// + /// Адрес SMTP сервера. + /// [ContextProperty("АдресСервераSMTP", "SmtpServerAddress")] public string SmtpServerAddress { get; set; } + /// + /// Указывает необходимость использования SSL соединения для протокола IMAP. + /// [ContextProperty("ИспользоватьSSLIMAP", "IMAPUseSSL")] public bool ImapUseSsl { get; set; } + /// + /// Использовать SSL-соединение для протокола POP3. + /// [ContextProperty("ИспользоватьSSLPOP3", "POP3UseSSL")] public bool Pop3UseSsl { get; set; } + /// + /// Использовать SSL соединение для протокола SMTP. + /// [ContextProperty("ИспользоватьSSLSMTP", "SMTPUseSSL")] public bool SmtpUseSsl { get; set; } + /// + /// Пароль доступа к почтовому ящику. Поддерживаются только символы, входящие в кодовую таблицу US-ASCII. + /// [ContextProperty("Пароль", "Password")] public string Password { get; set; } + /// + /// Содержит пароль пользователя IMAP-сервера. Поддерживаются только символы, входящие в кодовую таблицу US-ASCII. + /// [ContextProperty("ПарольIMAP", "IMAPPassword")] public string ImapPassword { get; set; } + /// + /// Содержит пароль пользователя для аутентификации на SMTP сервере. Поддерживаются только символы, входящие в кодовую таблицу US-ASCII. + /// [ContextProperty("ПарольSMTP", "SMTPPassword")] public string SmtpPassword { get; set; } + /// + /// Логин пользователя – часть «пользователь» почтового адреса. Поддерживаются только символы, входящие в кодовую таблицу US-ASCII. + /// [ContextProperty("Пользователь", "User")] public string User { get; set; } + /// + /// Содержит имя пользователя IMAP сервера. Поддерживаются только символы, входящие в кодовую таблицу US-ASCII. + /// [ContextProperty("ПользовательIMAP", "IMAPUser")] public string ImapUser { get; set; } + /// + /// Содержит логин пользователя для аутентификации на SMTP-сервере. Поддерживаются только символы, входящие в кодовую таблицу US-ASCII. + /// [ContextProperty("ПользовательSMTP", "SMTPUser")] public string SmtpUser { get; set; } + /// + /// Содержит порт IMAP-сервера. + /// 0 - использовать 993 порт для SSL-соединений и 143 - для незащищенных. + /// Значение по умолчанию: 0. + /// [ContextProperty("ПортIMAP", "IMAPPort")] public int ImapPort { get; set; } + /// + /// Порт протокола POP3. + /// 0 - означает использовать 995 порт для SSL соединений и 110 - для незащищенных. + /// Значение по умолчанию: 0. + /// [ContextProperty("ПортPOP3", "POP3Port")] public int Pop3Port { get; set; } + /// + /// Порт протокола SMTP. + /// 0 - означает использовать 465 порт для SSL соединений и 25 - для незащищенных. + /// Значение по умолчанию: 0. + /// [ContextProperty("ПортSMTP", "SMTPPort")] public int SmtpPort { get; set; } + /// + /// Определяет время ожидания удачного исполнения операции в секундах. + /// Значение по умолчанию: 30 секунд. + /// [ContextProperty("Таймаут", "Timeout")] public int Timeout { get; set; } + /// + /// Указывает на использование для протокола IMAP только защищенных способов аутентификации из поддерживаемых сервером (на данный момент CRAM-MD5). + /// Ложь - разрешить использовать незащищенные способы аутентификации, если сервер поддерживает только их. + /// [ContextProperty("ТолькоЗащищеннаяАутентификацияIMAP", "IMAPSecureAuthenticationOnly")] public bool ImapSecureAuthenticationOnly { get; set; } + /// + /// Указывает на использование для протокола POP3 только защищенных способов аутентификации из поддерживаемых сервером (на данный момент CRAM-MD5). + /// Ложь - разрешить использовать незащищенные способы аутентификации, если сервер поддерживает только их. + /// [ContextProperty("ТолькоЗащищеннаяАутентификацияPOP3", "POP3SecureAuthenticationOnly")] public bool Pop3SecureAuthenticationOnly { get; set; } + /// + /// Указывает на использование для протокола SMTP только защищенных способов аутентификации из поддерживаемых сервером (на данный момент CRAM-MD5). + /// Ложь - разрешить использовать незащищенные способы аутентификации, если сервер поддерживает только их. + /// [ContextProperty("ТолькоЗащищеннаяАутентификацияSMTP", "SMTPSecureAuthenticationOnly")] public bool SmtpSecureAuthenticationOnly { get; set; } diff --git a/MailComponent/Mail/InternetMailProtocol.cs b/MailComponent/Mail/InternetMailProtocol.cs old mode 100755 new mode 100644 index 03aef46..6245d5b --- a/MailComponent/Mail/InternetMailProtocol.cs +++ b/MailComponent/Mail/InternetMailProtocol.cs @@ -10,16 +10,28 @@ This Source Code Form is subject to the terms of the namespace OneScript.InternetMail { + /// + /// Определяет набор допустимых типов протоколов, используемых Интернет почтой. + /// [EnumerationType("ПротоколИнтернетПочты", "InternetMailProtocol")] public enum InternetMailProtocol { + /// + /// Соответствует IMAP протоколу. + /// [EnumItem("IMAP", "Имап")] Imap, + /// + /// Соответствует POP3 протоколу. + /// [EnumItem("POP3", "ПОП3")] Pop3, + /// + /// Соответствует SMTP протоколу. + /// [EnumItem("SMTP", "СМТП")] Smtp diff --git a/MailComponent/Mail/InternetMailText.cs b/MailComponent/Mail/InternetMailText.cs old mode 100755 new mode 100644 index db40a52..be2738f --- a/MailComponent/Mail/InternetMailText.cs +++ b/MailComponent/Mail/InternetMailText.cs @@ -11,6 +11,9 @@ This Source Code Form is subject to the terms of the namespace OneScript.InternetMail { + /// + /// Текстовые данные письма. + /// [ContextClass("ИнтернетТекстПочтовогоСообщения", "InternetMailText")] public class InternetMailText : AutoContext { @@ -36,6 +39,10 @@ public InternetMailText(string text, InternetMailTextType type) TextType = type; } + /// + /// Содержит текстовые данные сообщения. + /// Данные были только раскодированы, но работы над кодировкой текстов не производилось. + /// [ContextProperty("Данные", "Data")] public BinaryDataContext Data { @@ -46,12 +53,22 @@ public BinaryDataContext Data } } + /// + /// Содержит кодировку текстовых данных сообщения. + /// Если кодировка не указана, будет использоваться значение кодировки из свойства Кодировка. + /// [ContextProperty("Кодировка", "Encoding")] public string Encoding { get; set; } + /// + /// Текстовые данные сообщения. + /// [ContextProperty("Текст", "Text")] public string Text { get; set; } + /// + /// Тип текстовых данных письма. + /// [ContextProperty("ТипТекста", "TextType")] public InternetMailTextType TextType { get; set; } diff --git a/MailComponent/Mail/InternetMailTextProcessing.cs b/MailComponent/Mail/InternetMailTextProcessing.cs old mode 100755 new mode 100644 index 128d2c1..db748d5 --- a/MailComponent/Mail/InternetMailTextProcessing.cs +++ b/MailComponent/Mail/InternetMailTextProcessing.cs @@ -10,12 +10,22 @@ This Source Code Form is subject to the terms of the namespace OneScript.InternetMail { + /// + /// Определяет набор действий над текстами почтового сообщения перед отправкой. + /// [EnumerationType("ОбработкаТекстаИнтернетПочтовогоСообщения", "InternetMailTextProcessing")] public enum InternetMailTextProcessing { + /// + /// Обработка текстов почтового сообщения перед отправкой не требуется. Текст посылается без внутренней обработки. + /// Также отключает загрузку картинок при отправке HTML-документов. + /// [EnumItem("НеОбрабатывать", "DontProcess")] DontProcess, + /// + /// Тексты и картинки отправляемых HTML-документов загружаются и добавляются к письму как вложения, с соответствующей правкой этих HTML-документов. + /// [EnumItem("Обрабатывать", "Process")] Process } diff --git a/MailComponent/Mail/InternetMailTextType.cs b/MailComponent/Mail/InternetMailTextType.cs old mode 100755 new mode 100644 index e67deeb..68b0786 --- a/MailComponent/Mail/InternetMailTextType.cs +++ b/MailComponent/Mail/InternetMailTextType.cs @@ -10,15 +10,37 @@ This Source Code Form is subject to the terms of the namespace OneScript.InternetMail { + /// + /// Определяет набор допустимых типов текста почтового сообщения. + /// [EnumerationType("ТипТекстаПочтовогоСообщения", "InternetMailTextType")] public enum InternetMailTextType { + /// + /// Текст почтового сообщения в формате HTML. + /// При использовании текстов почтовых сообщений данного типа следует учитывать особенности их реализации на платформе Android. + /// При оформлении тела письма не рекомендуется использовать: + /// + /// - каскадные таблицы стилей, + /// - встроенные таблицы, + /// - встроенные изображения, + /// - шрифты разных размеров. + /// + /// Поведение может различаться при работе с разными клиентами и на различных версиях операционной системы. + /// Рекомендуется проверять результат на устройствах конечных пользователей. + /// [EnumItem("HTML", "ГиперТекст")] Html, + /// + /// Простой текст почтового сообщения. Отображается "как есть". + /// [EnumItem("ПростойТекст", "PlainText")] PlainText, + /// + /// Текст почтового сообщения в формате Rich Text. + /// [EnumItem("РазмеченныйТекст", "RichText")] RichText } diff --git a/MailComponent/Mail/InternetMailTexts.cs b/MailComponent/Mail/InternetMailTexts.cs old mode 100755 new mode 100644 index 56080c4..8e3584f --- a/MailComponent/Mail/InternetMailTexts.cs +++ b/MailComponent/Mail/InternetMailTexts.cs @@ -12,11 +12,18 @@ This Source Code Form is subject to the terms of the namespace OneScript.InternetMail { + /// + /// Представляет собой коллекцию объектов типа ИнтернетТекстПочтовогоСообщения. + /// [ContextClass("ИнтернетТекстыПочтовогоСообщения", "InternetMailTexts")] public class InternetMailTexts : AutoContext, ICollectionContext, IEnumerable { private readonly List _data = new List(); + /// + /// Получает количество элементов в коллекции почтовых текстов. + /// + /// [ContextMethod("Количество", "Count")] public int Count() { @@ -38,6 +45,13 @@ IEnumerator IEnumerable.GetEnumerator() return GetEnumerator(); } + /// + /// Добавляет текст в коллекцию почтовых текстов. + /// + /// Добавляемый текст. + /// Указывает тип добавляемого текста. + /// Значение по умолчанию: ПростойТекст. + /// [ContextMethod("Добавить", "Add")] public InternetMailText Add(string text, InternetMailTextType type = InternetMailTextType.PlainText) { @@ -52,18 +66,31 @@ public void Add(InternetMailText text) _data.Add(text); } + /// + /// Удаляет все тексты коллекции. + /// [ContextMethod("Очистить", "Clear")] public void Clear() { _data.Clear(); } + /// + /// Получает значение по индексу. Работает аналогично оператору []. + /// + /// Индекс элемента коллекции. + /// [ContextMethod("Получить", "Get")] public InternetMailText Get(int index) { return _data[index]; } + /// + /// Удаляет текст из коллекции текстов. + /// + /// Индекс элемента коллекции или элемент коллекции. + /// [ContextMethod("Удалить", "Delete")] public void Delete(IValue element) { diff --git a/MailComponent/MailComponent.csproj b/MailComponent/MailComponent.csproj old mode 100755 new mode 100644 index a79ddc2..57e9c81 --- a/MailComponent/MailComponent.csproj +++ b/MailComponent/MailComponent.csproj @@ -17,6 +17,7 @@ DEBUG; prompt 4 + bin\Debug\MailComponent.xml false @@ -25,6 +26,7 @@ bin\Release prompt 4 + bin\Release\MailComponent.xml false diff --git a/README.md b/README.md index 7327e97..b6cf8d5 100755 --- a/README.md +++ b/README.md @@ -7,3 +7,41 @@ ``` opm install InternetMail ``` + +## Пример работы (отправка HTML письма с вложениями) + +```bsl + +Профиль = Новый ИнтернетПочтовыйПрофиль; + +Профиль.АдресСервераSMTP = "smtp.mail.ru"; +Профиль.ПользовательSMTP = "someuser@mail.ru"; +Профиль.ПарольSMTP = "somepass123"; +Профиль.ИспользоватьSSLSMTP = Истина; + + +Профиль.АдресСервераPOP3 = "pop.mail.ru"; +Профиль.ИспользоватьSSLPOP3 = Истина; +Профиль.Пользователь = "someuser@mail.ru"; +Профиль.Пароль = "somepass123"; + +Сообщение = Новый ИнтернетПочтовоеСообщение; +Сообщение.Получатели.Добавить("receiver@mail.ru"); +Сообщение.ОбратныйАдрес.Добавить("someuser@mail.ru"); +Сообщение.Отправитель = "someuser@mail.ru"; +Сообщение.Тема = "Server is down"; +Текст = " + |

Server is down !

+ |Надо что-то делать.
"; + +Сообщение.Тексты.Добавить(Текст, ТипТекстаПочтовогоСообщения.HTML); +Сообщение.Вложения.Добавить("C:/Пример вложения 1.docx"); +Сообщение.Вложения.Добавить( + Новый ДвоичныеДанные("C:/Пример вложения 2.docx"), + "Пример вложения 2.docx" +); + +Почта = Новый ИнтернетПочта; +Почта.Подключиться(Профиль, ПротоколИнтернетПочты.POP3); +Почта.Послать(Сообщение, , ПротоколИнтернетПочты.SMTP); +``` \ No newline at end of file diff --git a/appveyor.yml b/appveyor.yml index 15a03c5..857ab42 100755 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,11 +1,55 @@ -version: 1.0.{build} +version: 1.0.4-{build} +image: Visual Studio 2017 +environment: + main_project: MailComponent before_build: - ps: nuget restore init: - ps: Set-WinSystemLocale ru-RU - ps: Start-Sleep -s 5 - ps: Restart-Computer +install: +- cmd: >- + mkdir engine + + cd engine + + appveyor DownloadFile http://oscript.io/downloads/latest/exe -FileName os.exe + + os.exe /silent + + set PATH=%ProgramFiles(x86)%\OneScript\bin;%PATH% + + cd .. + + appveyor DownloadFile https://github.com/dmpas/OneScriptDocumenter/releases/download/1.0.13/documenter.zip -FileName OneScriptDocumenter.zip + + 7z x OneScriptDocumenter.zip > NUL + + oscript -version + + opm install opm + build: verbosity: minimal +configuration: Release test_script: -- ps: nunit3-console --x86 NUnitTests\bin\Debug\NUnitTests.dll \ No newline at end of file +- cmd: nunit3-console --x86 NUnitTests\bin\%CONFIGURATION%\NUnitTests.dll + +after_build: +- cmd: >- + mkdir bin + + OneScriptDocumenter.exe json bin\syntaxHelp.json %main_project%\bin\%CONFIGURATION%\%main_project%.dll + + del %main_project%\bin\%CONFIGURATION%\*.pdb + + del %main_project%\bin\%CONFIGURATION%\ScriptEngine*.* %main_project%\bin\%CONFIGURATION%\NewtonSoft*.* %main_project%\bin\%CONFIGURATION%\DotNetZip*.* + + xcopy %main_project%\bin\%CONFIGURATION%\* bin\ + + opm build . + +artifacts: +- path: .\*.ospx + name: component diff --git a/lib/package-loader.os b/package-loader.os similarity index 100% rename from lib/package-loader.os rename to package-loader.os diff --git a/lib/packagedef b/packagedef similarity index 90% rename from lib/packagedef rename to packagedef index 0218e58..bfa6ce0 100755 --- a/lib/packagedef +++ b/packagedef @@ -4,12 +4,13 @@ // Описание.Имя("InternetMail") - .Версия("1.0.3") + .Версия("1.0.4") .Автор("Батанов Сергей") .АдресАвтора("sergey.batanov@dmpas.ru") .Описание("Реализация стандартных объектов из раздела ИнтернетПочта") .ВерсияСреды("1.0.15") .ВключитьФайл("bin") + .ВключитьФайл("README.md") .ВключитьФайл("package-loader.os") .ВключитьФайл("doc") ;