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")
;