From 72b2260beaf5885a78e28322e542e42f88f39980 Mon Sep 17 00:00:00 2001 From: Sergey Batanov Date: Fri, 20 Oct 2017 16:07:01 +0300 Subject: [PATCH 1/9] Fix #1: `Theme`->`Subject`. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `ИнтернетПочтовоеСообщение.Theme` переименовано в `ИнтернетПочтовоеСообщение.Subject`. `Theme` оставлено для совместимости и будет удалено в следующих версиях. --- MailComponent/Mail/InternetMailMessage.cs | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) mode change 100755 => 100644 MailComponent/Mail/InternetMailMessage.cs diff --git a/MailComponent/Mail/InternetMailMessage.cs b/MailComponent/Mail/InternetMailMessage.cs old mode 100755 new mode 100644 index 3f30b43..61c0ef0 --- a/MailComponent/Mail/InternetMailMessage.cs +++ b/MailComponent/Mail/InternetMailMessage.cs @@ -55,7 +55,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) { @@ -193,8 +193,14 @@ public InternetMailMessage(MimeMessage nativeMessage, string identifier) : this( [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; } @@ -265,7 +271,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) @@ -292,7 +298,7 @@ public MimeMessage CreateNativeMessage(InternetMailTextProcessing processText = messageToSend.ReplyTo.Add(replyTo.GetInternalObject()); } - messageToSend.Subject = Theme; + messageToSend.Subject = Subject; if (Texts.Count() == 1) { From f330b3b2c9f35223c3ceabba5492407d848897cc Mon Sep 17 00:00:00 2001 From: Sergey Batanov Date: Fri, 20 Oct 2017 16:14:25 +0300 Subject: [PATCH 2/9] =?UTF-8?q?=D0=A3=D1=81=D1=82=D0=B0=D0=BD=D0=BE=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D1=8F?= =?UTF-8?q?=20`1.0.4`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/packagedef | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/packagedef b/lib/packagedef index 0218e58..f7d0059 100755 --- a/lib/packagedef +++ b/lib/packagedef @@ -4,7 +4,7 @@ // Описание.Имя("InternetMail") - .Версия("1.0.3") + .Версия("1.0.4") .Автор("Батанов Сергей") .АдресАвтора("sergey.batanov@dmpas.ru") .Описание("Реализация стандартных объектов из раздела ИнтернетПочта") From 8f04a206a3bfaeab83e22ab7c9a4a40f13c255b3 Mon Sep 17 00:00:00 2001 From: Sergey Batanov Date: Fri, 20 Oct 2017 16:52:24 +0300 Subject: [PATCH 3/9] Feature/autobuild (#4) --- appveyor.yml | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 15a03c5..93d1767 100755 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,11 +1,39 @@ -version: 1.0.{build} +version: 1.0.4-{build} +image: Visual Studio 2017 before_build: - ps: nuget restore init: - ps: Set-WinSystemLocale ru-RU - ps: Start-Sleep -s 5 - ps: Restart-Computer +install: +- cmd: >- + choco install onescript.cli -source https://www.myget.org/F/onescript -y + + refreshenv + + opm install opm + +configuration: Release build: verbosity: minimal test_script: -- ps: nunit3-console --x86 NUnitTests\bin\Debug\NUnitTests.dll \ No newline at end of file +- ps: nunit3-console --x86 NUnitTests\bin\Release\NUnitTests.dll + +after_build: +- cmd: >- + xcopy MailComponent\bin\Release\*.dll lib /Y + + del lib\ScriptEngine*.dll lib\NewtonSoft*.dll lib\DotNetZip*.dll + + cd lib + + opm build . + + cd .. + +artifacts: +- path: lib\*.ospx + name: InternetMail +- path: lib\*.dll + name: components \ No newline at end of file From 1a46cc6819eb22be912b9847d42b88ba4c5cbc76 Mon Sep 17 00:00:00 2001 From: "Alexander I. Borisov" Date: Sun, 22 Oct 2017 23:50:32 +0300 Subject: [PATCH 4/9] =?UTF-8?q?#3=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BA=D0=BE=D1=80=D1=80=D0=B5=D0=BA=D1=82=D0=BD=D1=83?= =?UTF-8?q?=D1=8E=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA=D1=83?= =?UTF-8?q?=20=D1=81=D0=B2=D0=BE=D0=B9=D1=81=D1=82=D0=B2=D0=B0=20=D0=98?= =?UTF-8?q?=D0=BC=D1=8F=D0=9E=D1=82=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D0=B5=D0=BB=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MailComponent/Mail/InternetMailMessage.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MailComponent/Mail/InternetMailMessage.cs b/MailComponent/Mail/InternetMailMessage.cs index 61c0ef0..0ed9d32 100644 --- a/MailComponent/Mail/InternetMailMessage.cs +++ b/MailComponent/Mail/InternetMailMessage.cs @@ -282,7 +282,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 From e8ed112d1b557d30a44ecf488c124350bf51e20c Mon Sep 17 00:00:00 2001 From: Sergey Batanov Date: Mon, 23 Oct 2017 11:45:55 +0300 Subject: [PATCH 5/9] =?UTF-8?q?=D0=A1=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MailComponent/Mail/InternetMail.cs | 202 +++++++++++++++++- MailComponent/Mail/InternetMailAddress.cs | 21 ++ MailComponent/Mail/InternetMailAddresses.cs | 25 +++ MailComponent/Mail/InternetMailAttachment.cs | 27 +++ .../InternetMailAttachmentEncodingMode.cs | 9 + MailComponent/Mail/InternetMailAttachments.cs | 27 +++ MailComponent/Mail/InternetMailMessage.cs | 184 ++++++++++++++++ .../Mail/InternetMailMessageImportance.cs | 18 ++ ...tMailMessageNonASCIISymbolsEncodingMode.cs | 13 ++ .../Mail/InternetMailMessageParseStatus.cs | 11 + MailComponent/Mail/InternetMailProfile.cs | 74 +++++++ MailComponent/Mail/InternetMailProtocol.cs | 12 ++ MailComponent/Mail/InternetMailText.cs | 17 ++ .../Mail/InternetMailTextProcessing.cs | 10 + MailComponent/Mail/InternetMailTextType.cs | 22 ++ MailComponent/Mail/InternetMailTexts.cs | 27 +++ MailComponent/MailComponent.csproj | 2 + README.md | 31 +++ appveyor.yml | 48 +++-- lib/package-loader.os => package-loader.os | 0 lib/packagedef => packagedef | 1 + 21 files changed, 763 insertions(+), 18 deletions(-) mode change 100755 => 100644 MailComponent/Mail/InternetMail.cs mode change 100755 => 100644 MailComponent/Mail/InternetMailAddress.cs mode change 100755 => 100644 MailComponent/Mail/InternetMailAddresses.cs mode change 100755 => 100644 MailComponent/Mail/InternetMailAttachment.cs mode change 100755 => 100644 MailComponent/Mail/InternetMailAttachmentEncodingMode.cs mode change 100755 => 100644 MailComponent/Mail/InternetMailAttachments.cs mode change 100755 => 100644 MailComponent/Mail/InternetMailMessageImportance.cs mode change 100755 => 100644 MailComponent/Mail/InternetMailMessageNonASCIISymbolsEncodingMode.cs mode change 100755 => 100644 MailComponent/Mail/InternetMailMessageParseStatus.cs mode change 100755 => 100644 MailComponent/Mail/InternetMailProfile.cs mode change 100755 => 100644 MailComponent/Mail/InternetMailProtocol.cs mode change 100755 => 100644 MailComponent/Mail/InternetMailText.cs mode change 100755 => 100644 MailComponent/Mail/InternetMailTextProcessing.cs mode change 100755 => 100644 MailComponent/Mail/InternetMailTextType.cs mode change 100755 => 100644 MailComponent/Mail/InternetMailTexts.cs mode change 100755 => 100644 MailComponent/MailComponent.csproj rename lib/package-loader.os => package-loader.os (100%) rename lib/packagedef => packagedef (94%) 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 index 0ed9d32..651b8a2 100644 --- 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 { @@ -124,75 +127,200 @@ 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("Тема", "Subject")] public string Subject { get; set; } = ""; @@ -202,32 +330,74 @@ public InternetMailMessage(MimeMessage nativeMessage, string identifier) : this( 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) { @@ -235,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) { 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..a02b590 100755 --- a/README.md +++ b/README.md @@ -7,3 +7,34 @@ ``` opm install InternetMail ``` + +## Пример работы + +```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"; +Сообщение.Тексты.Добавить("Очень нужный и важный текст"); +Сообщение.Тексты.Добавить("Не очень нужный текст. Придёт вложением"); + +Почта = Новый ИнтернетПочта; +Почта.Подключиться(Профиль, ПротоколИнтернетПочты.POP3); +Почта.Послать(Сообщение, , ПротоколИнтернетПочты.SMTP); + +``` \ No newline at end of file diff --git a/appveyor.yml b/appveyor.yml index 93d1767..857ab42 100755 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,5 +1,7 @@ version: 1.0.4-{build} image: Visual Studio 2017 +environment: + main_project: MailComponent before_build: - ps: nuget restore init: @@ -8,32 +10,46 @@ init: - ps: Restart-Computer install: - cmd: >- - choco install onescript.cli -source https://www.myget.org/F/onescript -y + 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 .. - refreshenv + 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 - -configuration: Release + build: verbosity: minimal +configuration: Release test_script: -- ps: nunit3-console --x86 NUnitTests\bin\Release\NUnitTests.dll +- cmd: nunit3-console --x86 NUnitTests\bin\%CONFIGURATION%\NUnitTests.dll after_build: - cmd: >- - xcopy MailComponent\bin\Release\*.dll lib /Y - - del lib\ScriptEngine*.dll lib\NewtonSoft*.dll lib\DotNetZip*.dll + mkdir bin + + OneScriptDocumenter.exe json bin\syntaxHelp.json %main_project%\bin\%CONFIGURATION%\%main_project%.dll - cd lib + 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 . - - cd .. - + artifacts: -- path: lib\*.ospx - name: InternetMail -- path: lib\*.dll - name: components \ No newline at end of file +- 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 94% rename from lib/packagedef rename to packagedef index f7d0059..bfa6ce0 100755 --- a/lib/packagedef +++ b/packagedef @@ -10,6 +10,7 @@ .Описание("Реализация стандартных объектов из раздела ИнтернетПочта") .ВерсияСреды("1.0.15") .ВключитьФайл("bin") + .ВключитьФайл("README.md") .ВключитьФайл("package-loader.os") .ВключитьФайл("doc") ; From 619dbef229ff9bc6b6048850f7944497186946f9 Mon Sep 17 00:00:00 2001 From: "Alexander I. Borisov" Date: Mon, 23 Oct 2017 13:18:38 +0300 Subject: [PATCH 6/9] =?UTF-8?q?#7=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=B2=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6=D0=BD=D0=BE=D1=81?= =?UTF-8?q?=D1=82=D1=8C=20=D0=BE=D1=82=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B8?= =?UTF-8?q?=20=D0=B2=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MailComponent/Mail/InternetMailMessage.cs | 41 ++++++++++++++++------- 1 file changed, 28 insertions(+), 13 deletions(-) diff --git a/MailComponent/Mail/InternetMailMessage.cs b/MailComponent/Mail/InternetMailMessage.cs index 0ed9d32..38a481f 100644 --- a/MailComponent/Mail/InternetMailMessage.cs +++ b/MailComponent/Mail/InternetMailMessage.cs @@ -300,21 +300,36 @@ public MimeMessage CreateNativeMessage(InternetMailTextProcessing processText = 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) - { - var part = text.CreateTextPart(); - body.Add(part); - } - messageToSend.Body = body; - } - - return messageToSend; + + if (Attachments.Count() > 0) { + + foreach (InternetMailAttachment attachment in Attachments) + { + 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; + + return messageToSend; } [ScriptConstructor] From e9e337d3430c402962615b1a35227c25abe2d448 Mon Sep 17 00:00:00 2001 From: "Alexander I. Borisov" Date: Mon, 23 Oct 2017 14:07:06 +0300 Subject: [PATCH 7/9] =?UTF-8?q?=D0=97=D0=B0=D0=BC=D0=B5=D0=BD=D0=B8=D0=BB?= =?UTF-8?q?=20=D0=BE=D1=82=D1=81=D1=82=D1=83=D0=BF=D1=8B=20=D0=BD=D0=B0=20?= =?UTF-8?q?tab?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MailComponent/Mail/InternetMailMessage.cs | 47 +++++++++++------------ 1 file changed, 23 insertions(+), 24 deletions(-) diff --git a/MailComponent/Mail/InternetMailMessage.cs b/MailComponent/Mail/InternetMailMessage.cs index 38a481f..4d69dd3 100644 --- a/MailComponent/Mail/InternetMailMessage.cs +++ b/MailComponent/Mail/InternetMailMessage.cs @@ -306,30 +306,29 @@ public MimeMessage CreateNativeMessage(InternetMailTextProcessing processText = var part = text.CreateTextPart(); body.Add(part); } - - if (Attachments.Count() > 0) { - - foreach (InternetMailAttachment attachment in Attachments) - { - 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; - - return messageToSend; + + if (Attachments.Count() > 0) { + foreach (InternetMailAttachment attachment in Attachments) + { + 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; + + return messageToSend; } [ScriptConstructor] From 3a987138a9e33979d24ba6b4b9ac9fd697e86691 Mon Sep 17 00:00:00 2001 From: "Alexander I. Borisov" Date: Mon, 23 Oct 2017 15:07:31 +0300 Subject: [PATCH 8/9] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=20=D0=BF=D1=80=D0=B8=D0=BC=D0=B5=D1=80=20=D0=B8=D1=81=D0=BF?= =?UTF-8?q?=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/README.md b/README.md index 7327e97..079d697 100755 --- a/README.md +++ b/README.md @@ -7,3 +7,40 @@ ``` opm install InternetMail ``` + +## Пример отправки HTML сообщения со вложениями из OneScript через Yandex + +``` +#Использовать InternetMail + +Профиль = Новый ИнтернетПочтовыйПрофиль; +Профиль.Таймаут = 30; +Профиль.АдресСервераSMTP = "smtp.yandex.ru"; +Профиль.ПользовательSMTP = "from@yandex.ru"; +Профиль.ПарольSMTP = "Пароль"; +Профиль.ПортSMTP = 587; +Профиль.ИспользоватьSSLSMTP = Истина; + +Профиль.АдресСервераPOP3 = "pop.yandex.ru"; +Профиль.ИспользоватьSSLPOP3 = Истина; +Профиль.Пользователь = "from@yandex.ru"; +Профиль.Пароль = "Пароль"; + + +Сообщение = Новый ИнтернетПочтовоеСообщение; +Сообщение.Получатели.Добавить("to@gmail.com"); +Сообщение.ИмяОтправителя = "My name"; +Сообщение.Отправитель = "from@yandex.ru"; +Сообщение.Тема = "Тема тестового сообщения"; + +Текст = " + |

Пример !

+ |Это пример HTML сообщения.
"; + +Сообщение.Тексты.Добавить(Текст, ТипТекстаПочтовогоСообщения.HTML); +Сообщение.Вложения.Добавить("C:/Пример вложения 1.docx"); +Сообщение.Вложения.Добавить(Новый ДвоичныеДанные("C:/Пример вложения 2.docx"),"Пример вложения 2.docx"); +Почта = Новый ИнтернетПочта; +Почта.Подключиться(Профиль, ПротоколИнтернетПочты.POP3); +Почта.Послать(Сообщение, , ПротоколИнтернетПочты.SMTP); +``` \ No newline at end of file From 171249666d98b3453a4c2b648dd7615598aca55f Mon Sep 17 00:00:00 2001 From: "Alexander I. Borisov" Date: Mon, 23 Oct 2017 15:10:28 +0300 Subject: [PATCH 9/9] =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=80=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20README?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 079d697..0d5b10e 100755 --- a/README.md +++ b/README.md @@ -39,7 +39,11 @@ opm install InternetMail Сообщение.Тексты.Добавить(Текст, ТипТекстаПочтовогоСообщения.HTML); Сообщение.Вложения.Добавить("C:/Пример вложения 1.docx"); -Сообщение.Вложения.Добавить(Новый ДвоичныеДанные("C:/Пример вложения 2.docx"),"Пример вложения 2.docx"); +Сообщение.Вложения.Добавить( + Новый ДвоичныеДанные("C:/Пример вложения 2.docx"), + "Пример вложения 2.docx" +); + Почта = Новый ИнтернетПочта; Почта.Подключиться(Профиль, ПротоколИнтернетПочты.POP3); Почта.Послать(Сообщение, , ПротоколИнтернетПочты.SMTP);