#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ПрограммныйИнтерфейс
#Область ДляВызоваИзДругихПодсистем
Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт
Результат = Новый Массив;
Результат.Добавить("ИспользоватьДляОтправки");
Результат.Добавить("ИспользоватьДляПолучения");
Возврат Результат;
КонецФункции
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
Ограничение.Текст =
"РазрешитьЧтение
|ГДЕ
| ВЫБОР КОГДА ВладелецУчетнойЗаписи = ЗНАЧЕНИЕ(Справочник.Пользователи.ПустаяСсылка) ТОГДА
| ЗначениеРазрешено(Ссылка)
| ИНАЧЕ
| ЗначениеРазрешено(Ссылка, Отключено КАК Ложь)
| ИЛИ ЗначениеРазрешено(ВладелецУчетнойЗаписи, Отключено КАК Ложь)
| ИЛИ ЭтоАвторизованныйПользователь(ВладелецУчетнойЗаписи)
| КОНЕЦ
|;
|РазрешитьИзменениеЕслиРазрешеноЧтение
|ГДЕ
| ЗначениеРазрешено(ВладелецУчетнойЗаписи, ПустаяСсылка КАК Ложь)";
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#КонецЕсли
#Область ОбработчикиСобытий
Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Поля.Добавить("АдресЭлектроннойПочты");
Поля.Добавить("Наименование");
КонецПроцедуры
Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если ЗначениеЗаполнено(Данные.АдресЭлектроннойПочты) И СтрНайти(Данные.Наименование, Данные.АдресЭлектроннойПочты) = 0 Тогда
Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 (%2)'"),
Данные.Наименование, Данные.АдресЭлектроннойПочты);
Иначе
Представление = Данные.Наименование;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область СлужебныйПрограммныйИнтерфейс
Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия") Тогда
МодульВзаимодействия = ОбщегоНазначения.ОбщийМодуль("Взаимодействия");
МодульВзаимодействия.ЗарегистрироватьУчетныеЗаписиЭлектроннойПочтыКОбработкеДляПереходаНаНовуюВерсию(Параметры);
КонецЕсли;
ТекстЗапроса =
"ВЫБРАТЬ
| УчетныеЗаписиЭлектроннойПочты.Ссылка
|ИЗ
| Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты
|ГДЕ
| НЕ УчетныеЗаписиЭлектроннойПочты.ПриОтправкеПисемТребуетсяАвторизация
| И (УчетныеЗаписиЭлектроннойПочты.ПользовательSMTP <> """"
| ИЛИ УчетныеЗаписиЭлектроннойПочты.ТребуетсяВходНаСерверПередОтправкой)";
Запрос = Новый Запрос(ТекстЗапроса);
Результат = Запрос.Выполнить().Выгрузить();
МассивСсылок = Результат.ВыгрузитьКолонку("Ссылка");
ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, МассивСсылок);
КонецПроцедуры
Процедура ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры) Экспорт
УчетныеЗаписи = Новый Массив;
Выборка = ОбновлениеИнформационнойБазы.ВыбратьСсылкиДляОбработки(Параметры.Очередь, "Справочник.УчетныеЗаписиЭлектроннойПочты");
Пока Выборка.Следующий() Цикл
УчетныеЗаписи.Добавить(Выборка.Ссылка);
КонецЦикла;
ТекстЗапроса =
"ВЫБРАТЬ
| УчетныеЗаписиЭлектроннойПочты.Ссылка КАК Ссылка
|ИЗ
| Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты
|ГДЕ
| УчетныеЗаписиЭлектроннойПочты.Ссылка В(&УчетныеЗаписи)";
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("УчетныеЗаписи", УчетныеЗаписи);
Блокировка = Новый БлокировкаДанных;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия") Тогда
МодульВзаимодействия = ОбщегоНазначения.ОбщийМодуль("Взаимодействия");
МодульВзаимодействия.ПередУстановкойБлокировкиВОбработчикеОбновленияУчетныхЗаписейЭлектроннойПочты(Блокировка);
КонецЕсли;
Блокировка.Добавить("Справочник.УчетныеЗаписиЭлектроннойПочты");
НачатьТранзакцию();
Попытка
Блокировка.Заблокировать();
ВладельцыУчетныхЗаписей = Новый Соответствие;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия") Тогда
МодульВзаимодействия = ОбщегоНазначения.ОбщийМодуль("Взаимодействия");
ВладельцыУчетныхЗаписей = МодульВзаимодействия.ВладельцыУчетныхЗаписейЭлектроннойПочты(УчетныеЗаписи);
КонецЕсли;
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
УчетнаяЗапись = Выборка.Ссылка.ПолучитьОбъект();
УчетнаяЗапись.ДополнительныеСвойства.Вставить("НеПроверятьИзменениеНастроек");
Если ВладельцыУчетныхЗаписей[Выборка.Ссылка] <> Неопределено Тогда
УчетнаяЗапись.ВладелецУчетнойЗаписи = ВладельцыУчетныхЗаписей[Выборка.Ссылка];
КонецЕсли;
Если Не УчетнаяЗапись.ПриОтправкеПисемТребуетсяАвторизация
И (УчетнаяЗапись.ПользовательSMTP <> ""
Или УчетнаяЗапись.ТребуетсяВходНаСерверПередОтправкой) Тогда
УчетнаяЗапись.ПриОтправкеПисемТребуетсяАвторизация = Истина;
Если УчетнаяЗапись.ИспользоватьДляОтправки И УчетнаяЗапись.Пользователь <> УчетнаяЗапись.ПользовательSMTP Тогда
УчетнаяЗапись.Пользователь = УчетнаяЗапись.ПользовательSMTP;
УстановитьПривилегированныйРежим(Истина);
Пароли = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(УчетнаяЗапись.Ссылка, "Пароль,ПарольSMTP");
Если Пароли.Пароль <> Пароли.ПарольSMTP Тогда
ОбщегоНазначения.ЗаписатьДанныеВБезопасноеХранилище(УчетнаяЗапись.Ссылка, Пароли.ПарольSMTP);
КонецЕсли;
УстановитьПривилегированныйРежим(Ложь);
КонецЕсли;
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Взаимодействия") Тогда
МодульВзаимодействия.ОчиститьПризнакПерсональнаяУчетнаяЗапись(УчетнаяЗапись.Ссылка);
КонецЕсли;
ОбновлениеИнформационнойБазы.ЗаписатьДанные(УчетнаяЗапись);
КонецЦикла;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ЗаписьЖурналаРегистрации(НСтр("ru = 'Обновление учетных записей'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,, ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
ВызватьИсключение;
КонецПопытки;
Параметры.ОбработкаЗавершена = ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(Параметры.Очередь, "Справочник.УчетныеЗаписиЭлектроннойПочты");
КонецПроцедуры
Процедура ПриНастройкеНачальногоЗаполненияЭлементов(Настройки) Экспорт
Настройки.ПриНачальномЗаполненииЭлемента = Ложь;
КонецПроцедуры
Процедура ПриНачальномЗаполненииЭлементов(КодыЯзыков, Элементы, ТабличныеЧасти) Экспорт
Элемент = Элементы.Добавить();
Элемент.ИмяПредопределенныхДанных = "СистемнаяУчетнаяЗаписьЭлектроннойПочты";
Элемент.Наименование = НСтр("ru = 'Системная учетная запись'",
ОбщегоНазначения.КодОсновногоЯзыка());
Элемент.ИмяПользователя = НСтр("ru = '1С:Предприятие'", ОбщегоНазначения.КодОсновногоЯзыка());
Элемент.ИспользоватьДляПолучения = Ложь;
Элемент.ИспользоватьДляОтправки = Ложь;
Элемент.ОставлятьКопииСообщенийНаСервере = Ложь;
Элемент.ПериодХраненияСообщенийНаСервере = 0;
Элемент.ВремяОжидания = 30;
Элемент.ПортСервераВходящейПочты = 110;
Элемент.ПортСервераИсходящейПочты = 25;
Элемент.ПротоколВходящейПочты = "POP";
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка)
Если ВидФормы = "ФормаОбъекта"
И Не Параметры.Свойство("ЗначениеКопирования")
И ПравоДоступа("Редактирование", Метаданные.Справочники.УчетныеЗаписиЭлектроннойПочты)
И (Не Параметры.Свойство("Ключ")
Или Не РаботаСПочтовымиСообщениями.УчетнаяЗаписьНастроена(Параметры.Ключ, Ложь, Ложь) И ИзменениеРазрешено(Параметры.Ключ)) Тогда
ВыбраннаяФорма = "ПомощникНастройкиУчетнойЗаписи";
СтандартнаяОбработка = Ложь;
КонецЕсли;
КонецПроцедуры
Функция ИзменениеРазрешено(УчетнаяЗапись) Экспорт
Результат = ПравоДоступа("Редактирование", Метаданные.Справочники.УчетныеЗаписиЭлектроннойПочты);
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда
МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом");
Результат = Результат И МодульУправлениеДоступом.ИзменениеРазрешено(УчетнаяЗапись);
КонецЕсли;
Возврат Результат;
КонецФункции
Функция РазрешенияУчетныхЗаписей(УчетнаяЗапись = Неопределено) Экспорт
Результат = Новый Соответствие;
ТекстЗапроса =
"ВЫБРАТЬ
| УчетныеЗаписиЭлектроннойПочты.ПротоколВходящейПочты КАК Протокол,
| УчетныеЗаписиЭлектроннойПочты.СерверВходящейПочты КАК Сервер,
| УчетныеЗаписиЭлектроннойПочты.ПортСервераВходящейПочты КАК Порт,
| УчетныеЗаписиЭлектроннойПочты.Ссылка
|ПОМЕСТИТЬ СервераЭлектроннойПочты
|ИЗ
| Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты
|ГДЕ
| УчетныеЗаписиЭлектроннойПочты.ПротоколВходящейПочты <> """"
| И УчетныеЗаписиЭлектроннойПочты.ПометкаУдаления = ЛОЖЬ
| И УчетныеЗаписиЭлектроннойПочты.ИспользоватьДляПолучения = ИСТИНА
| И УчетныеЗаписиЭлектроннойПочты.СерверВходящейПочты <> """"
| И УчетныеЗаписиЭлектроннойПочты.ПортСервераВходящейПочты > 0
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ""SMTP"",
| УчетныеЗаписиЭлектроннойПочты.СерверИсходящейПочты,
| УчетныеЗаписиЭлектроннойПочты.ПортСервераИсходящейПочты,
| УчетныеЗаписиЭлектроннойПочты.Ссылка
|ИЗ
| Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты
|ГДЕ
| УчетныеЗаписиЭлектроннойПочты.ПометкаУдаления = ЛОЖЬ
| И УчетныеЗаписиЭлектроннойПочты.ИспользоватьДляОтправки = ИСТИНА
| И УчетныеЗаписиЭлектроннойПочты.СерверИсходящейПочты <> """"
| И УчетныеЗаписиЭлектроннойПочты.ПортСервераИсходящейПочты > 0
|;
|
|
|ВЫБРАТЬ
| СервераЭлектроннойПочты.Ссылка КАК Ссылка,
| СервераЭлектроннойПочты.Протокол КАК Протокол,
| СервераЭлектроннойПочты.Сервер КАК Сервер,
| СервераЭлектроннойПочты.Порт КАК Порт
|ИЗ
| СервераЭлектроннойПочты КАК СервераЭлектроннойПочты
|ГДЕ
| &Ссылка = НЕОПРЕДЕЛЕНО
|
|СГРУППИРОВАТЬ ПО
| СервераЭлектроннойПочты.Протокол,
| СервераЭлектроннойПочты.Сервер,
| СервераЭлектроннойПочты.Порт,
| СервераЭлектроннойПочты.Ссылка
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| СервераЭлектроннойПочты.Ссылка,
| СервераЭлектроннойПочты.Протокол,
| СервераЭлектроннойПочты.Сервер,
| СервераЭлектроннойПочты.Порт
|ИЗ
| СервераЭлектроннойПочты КАК СервераЭлектроннойПочты
|ГДЕ
| СервераЭлектроннойПочты.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| СервераЭлектроннойПочты.Протокол,
| СервераЭлектроннойПочты.Сервер,
| СервераЭлектроннойПочты.Порт,
| СервераЭлектроннойПочты.Ссылка
|ИТОГИ ПО
| Ссылка";
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("Ссылка", УчетнаяЗапись);
МодульРаботаВБезопасномРежиме = ОбщегоНазначения.ОбщийМодуль("РаботаВБезопасномРежиме");
УчетныеЗаписи = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока УчетныеЗаписи.Следующий() Цикл
Разрешения = Новый Массив;
НастройкиУчетнойЗаписи = УчетныеЗаписи.Выбрать();
Пока НастройкиУчетнойЗаписи.Следующий() Цикл
Разрешения.Добавить(
МодульРаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса(
НастройкиУчетнойЗаписи.Протокол,
НастройкиУчетнойЗаписи.Сервер,
НастройкиУчетнойЗаписи.Порт,
НСтр("ru = 'Электронная почта.'")));
КонецЦикла;
Результат.Вставить(УчетныеЗаписи.Ссылка, Разрешения);
КонецЦикла;
Возврат Результат;
КонецФункции
Функция ОпределитьИменаПочтовыхСерверовДомена(Домен)
Результат = Новый Массив;
ПараметрыЗапускаПрограммы = ФайловаяСистема.ПараметрыЗапускаПрограммы();
ПараметрыЗапускаПрограммы.ДождатьсяЗавершения = Истина;
ПараметрыЗапускаПрограммы.ПолучитьПотокВывода = Истина;
ПараметрыЗапускаПрограммы.ПолучитьПотокОшибок = Истина;
ПараметрыЗапускаПрограммы.КодировкаИсполнения = "OEM";
АдресаСерверовDNS = РаботаСПочтовымиСообщениямиСлужебный.АдресаСерверовDNS();
АдресаСерверовDNS.Вставить(0, "");
СтрокиКоманд = Новый Массив;
Для Каждого АдресСервера Из АдресаСерверовDNS Цикл
ШаблонКоманды = "nslookup -type=mx %1 %2";
СтрокаКоманды = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонКоманды, Домен, АдресСервера);
СтрокиКоманд.Добавить(СтрокаКоманды);
РезультатЗапуска = ФайловаяСистема.ЗапуститьПрограмму(СтрокаКоманды, ПараметрыЗапускаПрограммы);
Если РезультатЗапуска.КодВозврата = 0 Тогда
Ответ = РезультатЗапуска.ПотокВывода + Символы.ПС + РезультатЗапуска.ПотокОшибок;
Для Каждого Строка Из СтрРазделить(Ответ, Символы.ПС, Ложь) Цикл
Если СтрНайти(Строка, "mail exchanger") > 0 Тогда
ЧастиСтроки = СтрРазделить(Строка, " ", Ложь);
ИмяСервера = ЧастиСтроки[ЧастиСтроки.ВГраница()];
ИмяСервера = СтрСоединить(СтрРазделить(ИмяСервера, ".", Ложь), ".");
Результат.Добавить(ИмяСервера);
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если ЗначениеЗаполнено(Результат) Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
Функция ОпределитьНастройкиУчетнойЗаписи(Знач АдресЭлектроннойПочты, Пароль, ДляОтправки, ДляПолучения) Экспорт
АдресЭлектроннойПочты = РаботаСПочтовымиСообщениямиСлужебный.СтрокаВPunycode(АдресЭлектроннойПочты);
УстановитьПривилегированныйРежим(Истина);
НайденныеНастройки = НастройкиПодключенияПоАдресуЭлектроннойПочты(АдресЭлектроннойПочты, Пароль);
УстановитьПривилегированныйРежим(Ложь);
Возврат ПодобратьНастройкиПочты(АдресЭлектроннойПочты, Пароль, ДляОтправки, ДляПолучения, НайденныеНастройки.Профиль);
КонецФункции
Функция НастройкиПодключенияПоАдресуЭлектроннойПочты(АдресЭлектроннойПочты, Пароль = "") Экспорт
СтруктураАдреса = ОбщегоНазначенияКлиентСервер.СтруктураURI(АдресЭлектроннойПочты);
ПочтовыйДомен = СтруктураАдреса.Хост;
НайденныеНастройки = Неопределено;
ИмяПочтовогоСервера = "";
НастройкиПочтовыхСерверов = НастройкиПочтовыхСерверов();
Если НастройкиПочтовыхСерверов <> Неопределено Тогда
НайденныеНастройки = НастройкиПочтовыхСерверов[СтруктураАдреса.Хост];
ИмяПочтовогоСервера = СтруктураАдреса.Хост;
Если ТипЗнч(НайденныеНастройки) = Тип("Строка") Тогда
ИмяПочтовогоСервера = НайденныеНастройки;
НайденныеНастройки = НастройкиПочтовыхСерверов[НайденныеНастройки];
КонецЕсли;
Если НайденныеНастройки = Неопределено Тогда
ИменаСерверов = ОпределитьИменаПочтовыхСерверовДомена(СтруктураАдреса.Хост);
Для Каждого ИмяСервера Из ИменаСерверов Цикл
УровниДомена = СтрРазделить(ИмяСервера, ".", Ложь);
Пока УровниДомена.Количество() > 1 Цикл
Хост = СтрСоединить(УровниДомена, ".");
НайденныеНастройки = НастройкиПочтовыхСерверов[Хост];
ИмяПочтовогоСервера = Хост;
Если ТипЗнч(НайденныеНастройки) = Тип("Строка") Тогда
ИмяПочтовогоСервера = НайденныеНастройки;
НайденныеНастройки = НастройкиПочтовыхСерверов[НайденныеНастройки];
КонецЕсли;
Если ТипЗнч(НайденныеНастройки) = Тип("Соответствие") Тогда
Прервать;
Иначе
НайденныеНастройки = Неопределено;
КонецЕсли;
УровниДомена.Удалить(0);
КонецЦикла;
Если ТипЗнч(НайденныеНастройки) = Тип("Соответствие") Тогда
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
Если НайденныеНастройки = Неопределено Тогда
НайденныеНастройки = Новый Соответствие;
КонецЕсли;
Профиль = Неопределено;
Если ЗначениеЗаполнено(НайденныеНастройки) Тогда
Профиль = СформироватьПрофиль(НайденныеНастройки, АдресЭлектроннойПочты, Пароль);
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
НастройкиАвторизации = НастройкиАвторизацииСервера(НайденныеНастройки, ИмяПочтовогоСервера, ПочтовыйДомен);
УстановитьПривилегированныйРежим(Ложь);
Результат = Новый Структура;
Результат.Вставить("Профиль", Профиль);
Результат.Вставить("ИмяПочтовогоСервера", ИмяПочтовогоСервера);
Результат.Вставить("НастройкиАвторизации", НастройкиАвторизации);
Возврат Результат;
КонецФункции
Функция НастройкиАвторизацииСервера(НайденныеНастройки, ИмяПочтовогоСервера, ПочтовыйДомен)
НастройкиАвторизации = Справочники.НастройкиАвторизацииИнтернетСервисов.НастройкиАвторизацииИнтернетСервиса(ИмяПочтовогоСервера, ПочтовыйДомен);
НастройкиИзКлассификатора = НайденныеНастройки["OAuth"];
Если Не ЗначениеЗаполнено(НастройкиИзКлассификатора) Тогда
Возврат НастройкиАвторизации;
КонецЕсли;
НастройкиАвторизации.ИмяИнтернетСервиса = ИмяПочтовогоСервера;
НастройкиАвторизации.ВладелецДанных = ПочтовыйДомен;
Если Не ЗначениеЗаполнено(НастройкиАвторизации.АдресАвторизации) Тогда
НастройкиАвторизации.АдресАвторизации = НастройкиИзКлассификатора["AuthorizationURI"];
КонецЕсли;
Если Не ЗначениеЗаполнено(НастройкиАвторизации.АдресПолученияКлюча) Тогда
НастройкиАвторизации.АдресПолученияКлюча = НастройкиИзКлассификатора["TokenExchangeURI"];
КонецЕсли;
НастройкиАвторизации.ЗапрашиваемыеРазрешения = НастройкиИзКлассификатора["MailScope"];
Если ТипЗнч(НастройкиАвторизации.ЗапрашиваемыеРазрешения) = Тип("Массив") Тогда
НастройкиАвторизации.ЗапрашиваемыеРазрешения = СтрСоединить(НастройкиАвторизации.ЗапрашиваемыеРазрешения, " ");
КонецЕсли;
НастройкиАвторизации.ИспользоватьКлючПроверкиПодлинностиPKCE = НастройкиИзКлассификатора["UsePKCE"];
НастройкиАвторизации.ИспользоватьПарольПриложения = НастройкиИзКлассификатора["UseClientSecret"];
ДополнительныеПараметрыАвторизации = НастройкиИзКлассификатора["AuthorizationParameters"];
Если ЗначениеЗаполнено(ДополнительныеПараметрыАвторизации) Тогда
ОписанияПараметров = Новый Массив;
Для Каждого Элемент Из ДополнительныеПараметрыАвторизации Цикл
ОписанияПараметров.Добавить(Элемент.Ключ + "=" + XMLСтрока(Элемент.Значение));
КонецЦикла;
НастройкиАвторизации.ДополнительныеПараметрыАвторизации = СтрСоединить(ОписанияПараметров, " ");
КонецЕсли;
ДополнительныеПараметрыПолученияТокена = НастройкиИзКлассификатора["TokenExchangeParameters"];
Если ЗначениеЗаполнено(ДополнительныеПараметрыПолученияТокена) Тогда
ОписанияПараметров = Новый Массив;
Для Каждого Элемент Из ДополнительныеПараметрыПолученияТокена Цикл
ОписанияПараметров.Добавить(Элемент.Ключ + "=" + XMLСтрока(Элемент.Значение));
КонецЦикла;
НастройкиАвторизации.ДополнительныеПараметрыПолученияТокена = СтрСоединить(ОписанияПараметров, " ");
КонецЕсли;
НастройкиАвторизации.ПояснениеПоАдресуПеренаправления = СтроковыеФункции.ФорматированнаяСтрока(
СтрокаДляТекущегоЯзыка(НастройкиИзКлассификатора["RedirectURIDescription"]));
НастройкиАвторизации.ПояснениеПоИдентификаторуПриложения = СтроковыеФункции.ФорматированнаяСтрока(
СтрокаДляТекущегоЯзыка(НастройкиИзКлассификатора["ClientIDDescription"]));
НастройкиАвторизации.ПояснениеПоПаролюПриложения = СтроковыеФункции.ФорматированнаяСтрока(
СтрокаДляТекущегоЯзыка(НастройкиИзКлассификатора["ClientSecretDescription"]));
НастройкиАвторизации.ДополнительноеПояснение = СтроковыеФункции.ФорматированнаяСтрока(
СтрокаДляТекущегоЯзыка(НастройкиИзКлассификатора["AdditionalDescription"]));
НастройкиАвторизации.ПсевдонимАдресаПеренаправления = СтрокаДляТекущегоЯзыка(НастройкиИзКлассификатора["RedirectURICaption"]);
НастройкиАвторизации.ПсевдонимИдентификатораПриложения = СтрокаДляТекущегоЯзыка(НастройкиИзКлассификатора["ClientIDCaption"]);
НастройкиАвторизации.ПсевдонимПароляПриложения = СтрокаДляТекущегоЯзыка(НастройкиИзКлассификатора["ClientSecretCaption"]);
НастройкиАвторизации.АдресПеренаправленияПоУмолчанию = НастройкиИзКлассификатора["DefaultRedirectURI"];
НастройкиАвторизации.АдресПеренаправленияВебКлиент = НастройкиИзКлассификатора["WebClientRedirectURI"];
НастройкиАвторизации.АдресРегистрацииУстройства = НастройкиИзКлассификатора["DeviceAuthorizationURI"];
Возврат НастройкиАвторизации;
КонецФункции
Функция СтрокаДляТекущегоЯзыка(МультиязычнаяСтрока)
Если ТипЗнч(МультиязычнаяСтрока) <> Тип("Соответствие") Тогда
Возврат МультиязычнаяСтрока;
КонецЕсли;
Если Не ЗначениеЗаполнено(МультиязычнаяСтрока) Тогда
Возврат "";
КонецЕсли;
КодыЯзыков = Новый Структура;
КодыЯзыков.Вставить(ТекущийЯзык().КодЯзыка);
КодыЯзыков.Вставить(ОбщегоНазначения.КодОсновногоЯзыка());
КодыЯзыков.Вставить("en");
Для Каждого Элемент Из КодыЯзыков Цикл
КодЯзыка = Элемент.Ключ;
Если ЗначениеЗаполнено(МультиязычнаяСтрока[КодЯзыка]) Тогда
Возврат МультиязычнаяСтрока[КодЯзыка];
КонецЕсли;
КонецЦикла;
Возврат "";
КонецФункции
Функция НастройкиПочтовыхСерверов()
НастройкиПочтовыхСерверов = Неопределено;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда
МодульПолучениеФайловИзИнтернета = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернета");
АдресФайлаСНастройками = РаботаСПочтовымиСообщениямиСлужебный.АдресФайлаСНастройками();
ЗагруженныйФайл = МодульПолучениеФайловИзИнтернета.СкачатьФайлНаСервере(АдресФайлаСНастройками);
Если ЗагруженныйФайл.Статус Тогда
ЧтениеJSON = Новый ЧтениеJSON();
ЧтениеJSON.ОткрытьФайл(ЗагруженныйФайл.Путь);
НастройкиПочтовыхСерверов = ПрочитатьJSON(ЧтениеJSON, Истина);
ЧтениеJSON.Закрыть();
КонецЕсли;
КонецЕсли;
Возврат НастройкиПочтовыхСерверов;
КонецФункции
Функция ПодобратьНастройкиПочты(АдресЭлектроннойПочты, Пароль, ДляОтправки, ДляПолучения, Профиль = Неопределено)
НастройкиПолучены = Профиль <> Неопределено;
НайденныйПрофильSMTP = ?(НастройкиПолучены И ЗначениеЗаполнено(Профиль.АдресСервераSMTP), Профиль, Неопределено);
НайденныйПрофильIMAP = ?(НастройкиПолучены И ЗначениеЗаполнено(Профиль.АдресСервераIMAP), Профиль, Неопределено);
НайденныйПрофильPOP = ?(НастройкиПолучены И НайденныйПрофильIMAP = Неопределено И ЗначениеЗаполнено(Профиль.АдресСервераPOP3), Профиль, Неопределено);
Если Не НастройкиПолучены Тогда
Если ДляОтправки Тогда
НайденныйПрофильSMTP = ОпределитьНастройкиSMTP(АдресЭлектроннойПочты, Пароль);
КонецЕсли;
Если ДляОтправки Или ДляПолучения Тогда
НайденныйПрофильIMAP = ОпределитьНастройкиIMAP(АдресЭлектроннойПочты, Пароль);
Если НайденныйПрофильIMAP = Неопределено И ДляПолучения Тогда
НайденныйПрофильPOP = ОпределитьНастройкиPOP(АдресЭлектроннойПочты, Пароль);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Результат = Новый Структура;
Если НайденныйПрофильIMAP <> Неопределено Тогда
Результат.Вставить("ИмяПользователяДляПолученияПисем", НайденныйПрофильIMAP.ПользовательIMAP);
Результат.Вставить("ПарольДляПолученияПисем", НайденныйПрофильIMAP.ПарольIMAP);
Результат.Вставить("Протокол", "IMAP");
Результат.Вставить("СерверВходящейПочты", НайденныйПрофильIMAP.АдресСервераIMAP);
Результат.Вставить("ПортСервераВходящейПочты", НайденныйПрофильIMAP.ПортIMAP);
Результат.Вставить("ИспользоватьЗащищенноеСоединениеДляВходящейПочты", НайденныйПрофильIMAP.ИспользоватьSSLIMAP);
КонецЕсли;
Если НайденныйПрофильPOP <> Неопределено Тогда
Результат.Вставить("ИмяПользователяДляПолученияПисем", НайденныйПрофильPOP.Пользователь);
Результат.Вставить("ПарольДляПолученияПисем", НайденныйПрофильPOP.Пароль);
Результат.Вставить("Протокол", "POP");
Результат.Вставить("СерверВходящейПочты", НайденныйПрофильPOP.АдресСервераPOP3);
Результат.Вставить("ПортСервераВходящейПочты", НайденныйПрофильPOP.ПортPOP3);
Результат.Вставить("ИспользоватьЗащищенноеСоединениеДляВходящейПочты", НайденныйПрофильPOP.ИспользоватьSSLPOP3);
КонецЕсли;
Если НайденныйПрофильSMTP <> Неопределено Тогда
Результат.Вставить("ИмяПользователяДляОтправкиПисем", НайденныйПрофильSMTP.ПользовательSMTP);
Результат.Вставить("ПарольДляОтправкиПисем", НайденныйПрофильSMTP.ПарольSMTP);
Результат.Вставить("СерверИсходящейПочты", НайденныйПрофильSMTP.АдресСервераSMTP);
Результат.Вставить("ПортСервераИсходящейПочты", НайденныйПрофильSMTP.ПортSMTP);
Результат.Вставить("ИспользоватьЗащищенноеСоединениеДляИсходящейПочты", НайденныйПрофильSMTP.ИспользоватьSSLSMTP);
КонецЕсли;
Результат.Вставить("ДляПолучения", НайденныйПрофильIMAP <> Неопределено Или НайденныйПрофильPOP <> Неопределено);
Результат.Вставить("ДляОтправки", НайденныйПрофильSMTP <> Неопределено);
Результат.Вставить("ПроверкаНастроекВыполнена", Не НастройкиПолучены);
Возврат Результат;
КонецФункции
Функция СформироватьПрофиль(ИзвестныеНастройки, АдресЭлектроннойПочты, Пароль = "")
СтруктураАдреса = ОбщегоНазначенияКлиентСервер.СтруктураURI(АдресЭлектроннойПочты);
Профиль = Новый ИнтернетПочтовыйПрофиль;
Для Каждого Подключение Из ИзвестныеНастройки["Services"] Цикл
Если Подключение["Protocol"] = "SMTP" И Не ЗначениеЗаполнено(Профиль.АдресСервераSMTP) Тогда
Если Подключение["SMTPAuthentication"] = "Enabled" Или Подключение["SMTPAuthentication"] = Неопределено Тогда
Профиль.ПользовательSMTP = ?(Подключение["LoginFormat"] = "username", СтруктураАдреса.Логин, АдресЭлектроннойПочты);
Профиль.ПарольSMTP = Пароль;
КонецЕсли;
Профиль.ИспользоватьSSLSMTP = Подключение["Encryption"] = "SSL";
Профиль.АдресСервераSMTP = Подключение["Host"];
Профиль.ПортSMTP = Подключение["Port"];
Профиль.POP3ПередSMTP = Подключение["SMTPAuthentication"] = "POPBeforeSMTP";
КонецЕсли;
Если Подключение["Protocol"] = "IMAP" И Не ЗначениеЗаполнено(Профиль.АдресСервераIMAP) Тогда
Профиль.ИспользоватьSSLIMAP = Подключение["Encryption"] = "SSL";
Профиль.ПользовательIMAP = ?(Подключение["LoginFormat"] = "username", СтруктураАдреса.Логин, АдресЭлектроннойПочты);
Профиль.ПарольIMAP = Пароль;
Профиль.АдресСервераIMAP = Подключение["Host"];
Профиль.ПортIMAP = Подключение["Port"];
КонецЕсли;
Если Подключение["Protocol"] = "POP3" И Не ЗначениеЗаполнено(Профиль.АдресСервераPOP3) Тогда
Профиль.ИспользоватьSSLPOP3 = Подключение["Encryption"] = "SSL";
Профиль.Пользователь = ?(Подключение["LoginFormat"] = "username", СтруктураАдреса.Логин, АдресЭлектроннойПочты);
Профиль.Пароль = Пароль;
Профиль.АдресСервераPOP3 = Подключение["Host"];
Профиль.ПортPOP3 = Подключение["Port"];
КонецЕсли;
КонецЦикла;
Возврат Профиль;
КонецФункции
Функция ОпределитьНастройкиPOP(АдресЭлектроннойПочты, Пароль)
Для Каждого Профиль Из ПрофилиPOP(АдресЭлектроннойПочты, Пароль) Цикл
СообщениеСервера = ПроверитьПодключениеКСерверуВходящейПочты(Профиль, ПротоколИнтернетПочты.POP3);
Если ОшибкаАутентификации(СообщениеСервера) Тогда
Для Каждого ИмяПользователя Из ВариантыИмениПользователя(АдресЭлектроннойПочты) Цикл
УстановитьИмяПользователя(Профиль, ИмяПользователя);
СообщениеСервера = ПроверитьПодключениеКСерверуВходящейПочты(Профиль, ПротоколИнтернетПочты.POP3);
Если Не ОшибкаАутентификации(СообщениеСервера) Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Если ОшибкаАутентификации(СообщениеСервера) Тогда
Прервать;
КонецЕсли;
КонецЕсли;
Если ПодключениеВыполнено(СообщениеСервера) Тогда
Возврат Профиль;
КонецЕсли;
КонецЦикла;
Возврат Неопределено;
КонецФункции
Функция ОпределитьНастройкиIMAP(АдресЭлектроннойПочты, Пароль)
Для Каждого Профиль Из ПрофилиIMAP(АдресЭлектроннойПочты, Пароль) Цикл
СообщениеСервера = ПроверитьПодключениеКСерверуВходящейПочты(Профиль, ПротоколИнтернетПочты.IMAP);
Если ОшибкаАутентификации(СообщениеСервера) Тогда
Для Каждого ИмяПользователя Из ВариантыИмениПользователя(АдресЭлектроннойПочты) Цикл
УстановитьИмяПользователя(Профиль, ИмяПользователя);
СообщениеСервера = ПроверитьПодключениеКСерверуВходящейПочты(Профиль, ПротоколИнтернетПочты.IMAP);
Если Не ОшибкаАутентификации(СообщениеСервера) Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Если ОшибкаАутентификации(СообщениеСервера) Тогда
Прервать;
КонецЕсли;
КонецЕсли;
Если ПодключениеВыполнено(СообщениеСервера) Тогда
Возврат Профиль;
КонецЕсли;
КонецЦикла;
Возврат Неопределено;
КонецФункции
Функция ОпределитьНастройкиSMTP(АдресЭлектроннойПочты, Пароль)
Для Каждого Профиль Из ПрофилиSMTP(АдресЭлектроннойПочты, Пароль) Цикл
СообщениеСервера = ПроверитьПодключениеКСерверуИсходящейПочты(Профиль, АдресЭлектроннойПочты);
Если ОшибкаАутентификации(СообщениеСервера) Тогда
Для Каждого ИмяПользователя Из ВариантыИмениПользователя(АдресЭлектроннойПочты) Цикл
УстановитьИмяПользователя(Профиль, ИмяПользователя);
СообщениеСервера = ПроверитьПодключениеКСерверуИсходящейПочты(Профиль, АдресЭлектроннойПочты);
Если Не ОшибкаАутентификации(СообщениеСервера) Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Если ОшибкаАутентификации(СообщениеСервера) Тогда
Прервать;
КонецЕсли;
КонецЕсли;
Если ПодключениеВыполнено(СообщениеСервера) Тогда
Возврат Профиль;
КонецЕсли;
КонецЦикла;
Возврат Неопределено;
КонецФункции
Функция ПрофилиPOP(АдресЭлектроннойПочты, Пароль)
Результат = Новый Массив;
НастройкиПрофиля = НастройкиПоУмолчанию(АдресЭлектроннойПочты, Пароль);
Для Каждого ВариантНастройкиПодключения Из ВариантыНастройкиПодключенияКСерверуPOP(АдресЭлектроннойПочты) Цикл
Профиль = Новый ИнтернетПочтовыйПрофиль;
ЗаполнитьЗначенияСвойств(НастройкиПрофиля, ВариантНастройкиПодключения);
ЗаполнитьЗначенияСвойств(Профиль, ИнтернетПочтовыйПрофиль(НастройкиПрофиля, ПротоколИнтернетПочты.POP3));
Результат.Добавить(Профиль);
КонецЦикла;
Возврат Результат;
КонецФункции
Функция ПрофилиIMAP(АдресЭлектроннойПочты, Пароль)
Результат = Новый Массив;
НастройкиПрофиля = НастройкиПоУмолчанию(АдресЭлектроннойПочты, Пароль);
Для Каждого ВариантНастройкиПодключения Из ВариантыНастройкиПодключенияКСерверуIMAP(АдресЭлектроннойПочты) Цикл
ЗаполнитьЗначенияСвойств(НастройкиПрофиля, ВариантНастройкиПодключения);
Профиль = ИнтернетПочтовыйПрофиль(НастройкиПрофиля, ПротоколИнтернетПочты.IMAP);
Результат.Добавить(Профиль);
КонецЦикла;
Возврат Результат;
КонецФункции
Функция ПрофилиSMTP(АдресЭлектроннойПочты, Пароль)
Результат = Новый Массив;
НастройкиПрофиля = НастройкиПоУмолчанию(АдресЭлектроннойПочты, Пароль);
Для Каждого ВариантНастройкиПодключения Из ВариантыНастройкиПодключенияКСерверуSMTP(АдресЭлектроннойПочты) Цикл
Профиль = Новый ИнтернетПочтовыйПрофиль;
ЗаполнитьЗначенияСвойств(НастройкиПрофиля, ВариантНастройкиПодключения);
ЗаполнитьЗначенияСвойств(Профиль, ИнтернетПочтовыйПрофиль(НастройкиПрофиля, ПротоколИнтернетПочты.SMTP));
Результат.Добавить(Профиль);
КонецЦикла;
Возврат Результат;
КонецФункции
Функция ОшибкаАутентификации(СообщениеСервера)
Возврат СтрНайти(НРег(СообщениеСервера), "auth") > 0
Или СтрНайти(НРег(СообщениеСервера), "password") > 0
Или СтрНайти(НРег(СообщениеСервера), "credentials") > 0;
КонецФункции
Функция ПодключениеВыполнено(СообщениеСервера)
Возврат ПустаяСтрока(СообщениеСервера);
КонецФункции
Процедура УстановитьИмяПользователя(Профиль, ИмяПользователя)
Если Не ПустаяСтрока(Профиль.Пользователь) Тогда
Профиль.Пользователь = ИмяПользователя;
КонецЕсли;
Если Не ПустаяСтрока(Профиль.ПользовательIMAP) Тогда
Профиль.ПользовательIMAP = ИмяПользователя;
КонецЕсли;
Если Не ПустаяСтрока(Профиль.ПользовательSMTP) Тогда
Профиль.ПользовательSMTP = ИмяПользователя;
КонецЕсли;
КонецПроцедуры
Функция НастройкиПоУмолчанию(АдресЭлектроннойПочты, Пароль)
Позиция = СтрНайти(АдресЭлектроннойПочты, "@");
ИмяСервераВУчетнойЗаписи = Сред(АдресЭлектроннойПочты, Позиция + 1);
Настройки = Новый Структура;
Настройки.Вставить("ИмяПользователяДляПолученияПисем", АдресЭлектроннойПочты);
Настройки.Вставить("ИмяПользователяДляОтправкиПисем", АдресЭлектроннойПочты);
Настройки.Вставить("ПарольДляОтправкиПисем", Пароль);
Настройки.Вставить("ПарольДляПолученияПисем", Пароль);
Настройки.Вставить("Протокол", "POP");
Настройки.Вставить("СерверВходящейПочты", "pop." + ИмяСервераВУчетнойЗаписи);
Настройки.Вставить("ПортСервераВходящейПочты", 995);
Настройки.Вставить("ИспользоватьЗащищенноеСоединениеДляВходящейПочты", Истина);
Настройки.Вставить("СерверИсходящейПочты", "smtp." + ИмяСервераВУчетнойЗаписи);
Настройки.Вставить("ПортСервераИсходящейПочты", 465);
Настройки.Вставить("ИспользоватьЗащищенноеСоединениеДляИсходящейПочты", Истина);
Настройки.Вставить("ТребуетсяВходНаСерверПередОтправкой", Ложь);
Настройки.Вставить("ДлительностьОжиданияСервера", 30);
Настройки.Вставить("ОставлятьКопииПисемНаСервере", Истина);
Настройки.Вставить("УдалятьПисьмаССервераЧерез", 0);
Возврат Настройки;
КонецФункции
Функция ПроверитьПодключениеКСерверуВходящейПочты(Профиль, Протокол)
ИнтернетПочта = Новый ИнтернетПочта;
ТекстОшибки = "";
Попытка
ИнтернетПочта.Подключиться(Профиль, Протокол);
Исключение
ТекстОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
ИнтернетПочта.Отключиться();
Если Протокол = ПротоколИнтернетПочты.POP3 Тогда
ТекстДляЖурнала = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1:%2%3 (%4)" + Символы.ПС + "%5",
Профиль.АдресСервераPOP3,
Профиль.ПортPOP3,
?(Профиль.ИспользоватьSSLPOP3, "/SSL", ""),
Профиль.Пользователь,
?(ПустаяСтрока(ТекстОшибки), НСтр("ru = 'OK'"), ТекстОшибки));
Иначе
ТекстДляЖурнала = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1:%2%3 (%4)" + Символы.ПС + "%5",
Профиль.АдресСервераIMAP,
Профиль.ПортIMAP,
?(Профиль.ИспользоватьSSLIMAP, "/SSL", ""),
Профиль.ПользовательIMAP,
?(ПустаяСтрока(ТекстОшибки), НСтр("ru = 'OK'"), ТекстОшибки));
КонецЕсли;
ЗаписьЖурналаРегистрации(СобытиеПроверкаПодключенияКПочтовомуСерверу(),
УровеньЖурналаРегистрации.Информация, , , ТекстДляЖурнала);
Возврат ТекстОшибки;
КонецФункции
Функция ПроверитьПодключениеКСерверуИсходящейПочты(Профиль, АдресЭлектроннойПочты)
Тема = НСтр("ru = 'Тестовое сообщение 1С:Предприятие'");
Тело = НСтр("ru = 'Это сообщение отправлено подсистемой электронной почты 1С:Предприятие'");
ИмяОтправителяПисем = НСтр("ru = '1С:Предприятие'");
Письмо = Новый ИнтернетПочтовоеСообщение;
Письмо.Тема = Тема;
Получатель = Письмо.Получатели.Добавить(АдресЭлектроннойПочты);
Получатель.ОтображаемоеИмя = ИмяОтправителяПисем;
Письмо.ИмяОтправителя = ИмяОтправителяПисем;
Письмо.Отправитель.ОтображаемоеИмя = ИмяОтправителяПисем;
Письмо.Отправитель.Адрес = АдресЭлектроннойПочты;
Текст = Письмо.Тексты.Добавить(Тело);
Текст.ТипТекста = ТипТекстаПочтовогоСообщения.ПростойТекст;
ИнтернетПочта = Новый ИнтернетПочта;
ТекстОшибки = "";
Попытка
ИнтернетПочта.Подключиться(Профиль);
ИнтернетПочта.Послать(Письмо);
Исключение
ТекстОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
ИнтернетПочта.Отключиться();
ТекстДляЖурнала = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("%1:%2%3 (%4)" + Символы.ПС + "%5",
Профиль.АдресСервераSMTP,
Профиль.ПортSMTP,
?(Профиль.ИспользоватьSSLSMTP, "/SSL", ""),
Профиль.ПользовательSMTP,
?(ПустаяСтрока(ТекстОшибки), НСтр("ru = 'OK'"), ТекстОшибки));
ЗаписьЖурналаРегистрации(СобытиеПроверкаПодключенияКПочтовомуСерверу(),
УровеньЖурналаРегистрации.Информация, , , ТекстДляЖурнала);
Возврат ТекстОшибки;
КонецФункции
Функция ИнтернетПочтовыйПрофиль(НастройкиПрофиля, Протокол)
ДляПолучения = Протокол <> ПротоколИнтернетПочты.SMTP;
Профиль = Новый ИнтернетПочтовыйПрофиль;
Если ДляПолучения Или НастройкиПрофиля.ТребуетсяВходНаСерверПередОтправкой Тогда
Если Протокол = ПротоколИнтернетПочты.IMAP Тогда
Профиль.АдресСервераIMAP = НастройкиПрофиля.СерверВходящейПочты;
Профиль.ИспользоватьSSLIMAP = НастройкиПрофиля.ИспользоватьЗащищенноеСоединениеДляВходящейПочты;
Профиль.ПарольIMAP = НастройкиПрофиля.ПарольДляПолученияПисем;
Профиль.ПользовательIMAP = НастройкиПрофиля.ИмяПользователяДляПолученияПисем;
Профиль.ПортIMAP = НастройкиПрофиля.ПортСервераВходящейПочты;
Иначе
Профиль.АдресСервераPOP3 = НастройкиПрофиля.СерверВходящейПочты;
Профиль.ИспользоватьSSLPOP3 = НастройкиПрофиля.ИспользоватьЗащищенноеСоединениеДляВходящейПочты;
Профиль.Пароль = НастройкиПрофиля.ПарольДляПолученияПисем;
Профиль.Пользователь = НастройкиПрофиля.ИмяПользователяДляПолученияПисем;
Профиль.ПортPOP3 = НастройкиПрофиля.ПортСервераВходящейПочты;
КонецЕсли;
КонецЕсли;
Если Не ДляПолучения Тогда
Профиль.POP3ПередSMTP = НастройкиПрофиля.ТребуетсяВходНаСерверПередОтправкой;
Профиль.АдресСервераSMTP = НастройкиПрофиля.СерверИсходящейПочты;
Профиль.ИспользоватьSSLSMTP = НастройкиПрофиля.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты;
Профиль.ПарольSMTP = НастройкиПрофиля.ПарольДляОтправкиПисем;
Профиль.ПользовательSMTP = НастройкиПрофиля.ИмяПользователяДляОтправкиПисем;
Профиль.ПортSMTP = НастройкиПрофиля.ПортСервераИсходящейПочты;
КонецЕсли;
Профиль.Таймаут = НастройкиПрофиля.ДлительностьОжиданияСервера;
Возврат Профиль;
КонецФункции
Функция ВариантыИмениПользователя(АдресЭлектроннойПочты)
Позиция = СтрНайти(АдресЭлектроннойПочты, "@");
ИмяПользователяВУчетнойЗаписи = Лев(АдресЭлектроннойПочты, Позиция - 1);
Результат = Новый Массив;
Результат.Добавить(ИмяПользователяВУчетнойЗаписи);
Возврат Результат;
КонецФункции
Функция ВариантыНастройкиПодключенияКСерверуIMAP(АдресЭлектроннойПочты) Экспорт
Позиция = СтрНайти(АдресЭлектроннойПочты, "@");
ИмяСервераВУчетнойЗаписи = Сред(АдресЭлектроннойПочты, Позиция + 1);
Результат = Новый ТаблицаЗначений;
Результат.Колонки.Добавить("СерверВходящейПочты");
Результат.Колонки.Добавить("ПортСервераВходящейПочты");
Результат.Колонки.Добавить("ИспользоватьЗащищенноеСоединениеДляВходящейПочты");
Если ИмяСервераВУчетнойЗаписи = "icloud.com" Тогда
ВариантНастройки = Результат.Добавить();
ВариантНастройки.СерверВходящейПочты = "imap.mail.me.com";
ВариантНастройки.ПортСервераВходящейПочты = 993;
ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Истина;
Возврат Результат;
КонецЕсли;
Если ИмяСервераВУчетнойЗаписи = "outlook.com" Тогда
ВариантНастройки = Результат.Добавить();
ВариантНастройки.СерверВходящейПочты = "outlook.office365.com";
ВариантНастройки.ПортСервераВходящейПочты = 993;
ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Истина;
Возврат Результат;
КонецЕсли;
ВариантНастройки = Результат.Добавить();
ВариантНастройки.СерверВходящейПочты = "imap." + ИмяСервераВУчетнойЗаписи;
ВариантНастройки.ПортСервераВходящейПочты = 993;
ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Истина;
ВариантНастройки = Результат.Добавить();
ВариантНастройки.СерверВходящейПочты = "mail." + ИмяСервераВУчетнойЗаписи;
ВариантНастройки.ПортСервераВходящейПочты = 993;
ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Истина;
ВариантНастройки = Результат.Добавить();
ВариантНастройки.СерверВходящейПочты = ИмяСервераВУчетнойЗаписи;
ВариантНастройки.ПортСервераВходящейПочты = 993;
ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Истина;
ВариантНастройки = Результат.Добавить();
ВариантНастройки.СерверВходящейПочты = "imap." + ИмяСервераВУчетнойЗаписи;
ВариантНастройки.ПортСервераВходящейПочты = 143;
ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Ложь;
ВариантНастройки = Результат.Добавить();
ВариантНастройки.СерверВходящейПочты = "mail." + ИмяСервераВУчетнойЗаписи;
ВариантНастройки.ПортСервераВходящейПочты = 143;
ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Ложь;
ВариантНастройки = Результат.Добавить();
ВариантНастройки.СерверВходящейПочты = ИмяСервераВУчетнойЗаписи;
ВариантНастройки.ПортСервераВходящейПочты = 143;
ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Ложь;
Возврат Результат;
КонецФункции
Функция ВариантыНастройкиПодключенияКСерверуPOP(АдресЭлектроннойПочты)
Позиция = СтрНайти(АдресЭлектроннойПочты, "@");
ИмяСервераВУчетнойЗаписи = Сред(АдресЭлектроннойПочты, Позиция + 1);
Результат = Новый ТаблицаЗначений;
Результат.Колонки.Добавить("СерверВходящейПочты");
Результат.Колонки.Добавить("ПортСервераВходящейПочты");
Результат.Колонки.Добавить("ИспользоватьЗащищенноеСоединениеДляВходящейПочты");
ВариантНастройки = Результат.Добавить();
ВариантНастройки.СерверВходящейПочты = "pop." + ИмяСервераВУчетнойЗаписи;
ВариантНастройки.ПортСервераВходящейПочты = 995;
ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Истина;
ВариантНастройки = Результат.Добавить();
ВариантНастройки.СерверВходящейПочты = "pop3." + ИмяСервераВУчетнойЗаписи;
ВариантНастройки.ПортСервераВходящейПочты = 995;
ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Истина;
ВариантНастройки = Результат.Добавить();
ВариантНастройки.СерверВходящейПочты = "mail." + ИмяСервераВУчетнойЗаписи;
ВариантНастройки.ПортСервераВходящейПочты = 995;
ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Истина;
ВариантНастройки = Результат.Добавить();
ВариантНастройки.СерверВходящейПочты = ИмяСервераВУчетнойЗаписи;
ВариантНастройки.ПортСервераВходящейПочты = 995;
ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Истина;
ВариантНастройки = Результат.Добавить();
ВариантНастройки.СерверВходящейПочты = "pop." + ИмяСервераВУчетнойЗаписи;
ВариантНастройки.ПортСервераВходящейПочты = 110;
ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Ложь;
ВариантНастройки = Результат.Добавить();
ВариантНастройки.СерверВходящейПочты = "pop3." + ИмяСервераВУчетнойЗаписи;
ВариантНастройки.ПортСервераВходящейПочты = 110;
ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Ложь;
ВариантНастройки = Результат.Добавить();
ВариантНастройки.СерверВходящейПочты = "mail." + ИмяСервераВУчетнойЗаписи;
ВариантНастройки.ПортСервераВходящейПочты = 110;
ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Ложь;
ВариантНастройки = Результат.Добавить();
ВариантНастройки.СерверВходящейПочты = ИмяСервераВУчетнойЗаписи;
ВариантНастройки.ПортСервераВходящейПочты = 110;
ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляВходящейПочты = Ложь;
Возврат Результат;
КонецФункции
Функция ВариантыНастройкиПодключенияКСерверуSMTP(АдресЭлектроннойПочты) Экспорт
Позиция = СтрНайти(АдресЭлектроннойПочты, "@");
ИмяСервераВУчетнойЗаписи = Сред(АдресЭлектроннойПочты, Позиция + 1);
Результат = Новый ТаблицаЗначений;
Результат.Колонки.Добавить("СерверИсходящейПочты");
Результат.Колонки.Добавить("ПортСервераИсходящейПочты");
Результат.Колонки.Добавить("ИспользоватьЗащищенноеСоединениеДляИсходящейПочты");
Если ИмяСервераВУчетнойЗаписи = "icloud.com" Тогда
ВариантНастройки = Результат.Добавить();
ВариантНастройки.СерверИсходящейПочты = "smtp.mail.me.com";
ВариантНастройки.ПортСервераИсходящейПочты = 587;
ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты = Ложь;
Возврат Результат;
КонецЕсли;
Если ИмяСервераВУчетнойЗаписи = "outlook.com" Тогда
ВариантНастройки = Результат.Добавить();
ВариантНастройки.СерверИсходящейПочты = "smtp-mail.outlook.com";
ВариантНастройки.ПортСервераИсходящейПочты = 587;
ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты = Ложь;
Возврат Результат;
КонецЕсли;
ВариантНастройки = Результат.Добавить();
ВариантНастройки.СерверИсходящейПочты = "smtp." + ИмяСервераВУчетнойЗаписи;
ВариантНастройки.ПортСервераИсходящейПочты = 465;
ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты = Истина;
ВариантНастройки = Результат.Добавить();
ВариантНастройки.СерверИсходящейПочты = "mail." + ИмяСервераВУчетнойЗаписи;
ВариантНастройки.ПортСервераИсходящейПочты = 465;
ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты = Истина;
ВариантНастройки = Результат.Добавить();
ВариантНастройки.СерверИсходящейПочты = ИмяСервераВУчетнойЗаписи;
ВариантНастройки.ПортСервераИсходящейПочты = 465;
ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты = Истина;
ВариантНастройки = Результат.Добавить();
ВариантНастройки.СерверИсходящейПочты = "smtp." + ИмяСервераВУчетнойЗаписи;
ВариантНастройки.ПортСервераИсходящейПочты = 587;
ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты = Ложь;
ВариантНастройки = Результат.Добавить();
ВариантНастройки.СерверИсходящейПочты = "mail." + ИмяСервераВУчетнойЗаписи;
ВариантНастройки.ПортСервераИсходящейПочты = 587;
ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты = Ложь;
ВариантНастройки = Результат.Добавить();
ВариантНастройки.СерверИсходящейПочты = ИмяСервераВУчетнойЗаписи;
ВариантНастройки.ПортСервераИсходящейПочты = 587;
ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты = Ложь;
ВариантНастройки = Результат.Добавить();
ВариантНастройки.СерверИсходящейПочты = "smtp." + ИмяСервераВУчетнойЗаписи;
ВариантНастройки.ПортСервераИсходящейПочты = 25;
ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты = Ложь;
ВариантНастройки = Результат.Добавить();
ВариантНастройки.СерверИсходящейПочты = "mail." + ИмяСервераВУчетнойЗаписи;
ВариантНастройки.ПортСервераИсходящейПочты = 25;
ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты = Ложь;
ВариантНастройки = Результат.Добавить();
ВариантНастройки.СерверИсходящейПочты = ИмяСервераВУчетнойЗаписи;
ВариантНастройки.ПортСервераИсходящейПочты = 25;
ВариантНастройки.ИспользоватьЗащищенноеСоединениеДляИсходящейПочты = Ложь;
Возврат Результат;
КонецФункции
Функция РеквизитыТребующиеВводаПароляДляИзменения() Экспорт
Реквизиты = Новый Массив;
Реквизиты.Добавить("ИспользоватьДляОтправки");
Реквизиты.Добавить("ИспользоватьДляПолучения");
Реквизиты.Добавить("СерверВходящейПочты");
Реквизиты.Добавить("СерверИсходящейПочты");
Реквизиты.Добавить("ВладелецУчетнойЗаписи");
Реквизиты.Добавить("ИспользоватьЗащищенноеСоединениеДляВходящейПочты");
Реквизиты.Добавить("ИспользоватьЗащищенноеСоединениеДляИсходящейПочты");
Реквизиты.Добавить("Пользователь");
Реквизиты.Добавить("ПользовательSMTP");
Реквизиты.Добавить("ПриОтправкеПисемТребуетсяАвторизация");
Реквизиты.Добавить("ИмяПользователя");
Возврат СтрСоединить(Реквизиты, ",");
КонецФункции
Функция ТребуетсяПроверкаПароля(Ссылка, ЗначенияРеквизитовПередЗаписью) Экспорт
Если Ссылка.Пустая() Тогда
Возврат Ложь;
КонецЕсли;
СписокРеквизитов = РеквизитыТребующиеВводаПароляДляИзменения();
ЗаписанныеЗначенияРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка, СписокРеквизитов);
Результат = ЗначениеЗаполнено(ЗаписанныеЗначенияРеквизитов.ВладелецУчетнойЗаписи);
Если Результат Тогда
ДоИзменения = Новый Структура(СписокРеквизитов);
ЗаполнитьЗначенияСвойств(ДоИзменения, ЗаписанныеЗначенияРеквизитов);
ПослеИзменения = Новый Структура(СписокРеквизитов);
ЗаполнитьЗначенияСвойств(ПослеИзменения, ЗначенияРеквизитовПередЗаписью);
Результат = ОбщегоНазначения.ЗначениеВСтрокуXML(ДоИзменения) <> ОбщегоНазначения.ЗначениеВСтрокуXML(ПослеИзменения);
КонецЕсли;
Возврат Результат;
КонецФункции
Функция ПроверитьВозможностьПодключенияКПочтовомуСерверу(Знач УчетнаяЗапись, Знач ВходящаяПочта) Экспорт
УстановитьОтключениеБезопасногоРежима(Истина);
Профиль = РаботаСПочтовымиСообщениямиСлужебный.ИнтернетПочтовыйПрофиль(УчетнаяЗапись, ВходящаяПочта);
Если ВходящаяПочта Тогда
Протокол = ПротоколИнтернетПочты.POP3;
Если ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УчетнаяЗапись, "ПротоколВходящейПочты") = "IMAP" Тогда
Протокол = ПротоколИнтернетПочты.IMAP;
КонецЕсли;
ТекстОшибки = ПроверитьПодключениеКСерверуВходящейПочты(Профиль, Протокол);
Иначе
Адрес = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(УчетнаяЗапись, "АдресЭлектроннойПочты");
ТекстОшибки = ПроверитьПодключениеКСерверуИсходящейПочты(Профиль, Адрес);
КонецЕсли;
Возврат ТекстОшибки;
КонецФункции
Функция ПроверитьНастройкиУчетнойЗаписи(УчетнаяЗапись) Экспорт
НастройкиУчетнойЗаписи = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(УчетнаяЗапись,
"ИспользоватьДляОтправки,ИспользоватьДляПолучения,АдресЭлектроннойПочты");
ПрофильИсходящейПочты = Неопределено;
ПрофильВходящейПочты = Неопределено;
УстановитьОтключениеБезопасногоРежима(Истина);
Если НастройкиУчетнойЗаписи.ИспользоватьДляОтправки Тогда
ПрофильИсходящейПочты = РаботаСПочтовымиСообщениямиСлужебный.ИнтернетПочтовыйПрофиль(УчетнаяЗапись, Ложь);
КонецЕсли;
Если НастройкиУчетнойЗаписи.ИспользоватьДляПолучения Тогда
ПрофильВходящейПочты = РаботаСПочтовымиСообщениямиСлужебный.ИнтернетПочтовыйПрофиль(УчетнаяЗапись, Истина);
КонецЕсли;
УстановитьОтключениеБезопасногоРежима(Ложь);
АдресЭлектроннойПочты = РаботаСПочтовымиСообщениямиСлужебный.СтрокаВPunycode(НастройкиУчетнойЗаписи.АдресЭлектроннойПочты);
Возврат ПроверитьНастройкиПрофилей(ПрофильИсходящейПочты, ПрофильВходящейПочты, АдресЭлектроннойПочты);
КонецФункции
Функция ПроверитьНастройкиПрофилей(ПрофильИсходящейПочты, ПрофильВходящейПочты, Знач АдресЭлектроннойПочты) Экспорт
АдресЭлектроннойПочты = РаботаСПочтовымиСообщениямиСлужебный.СтрокаВPunycode(АдресЭлектроннойПочты);
ТекстСообщения = Новый Массив;
ТехническиеПодробности = Новый Массив;
ВыполненныеПроверки = Новый Массив;
ОшибкаАутентификации = Ложь;
ТребуетсяПроверкаНастроекИсходящейПочты = Ложь;
ТребуетсяПроверкаНастроекВходящейПочты = Ложь;
ТекстыОшибок = Новый Массив;
Если ПрофильИсходящейПочты <> Неопределено Тогда
ТекстОшибки = ПроверитьПодключениеКСерверуИсходящейПочты(ПрофильИсходящейПочты, АдресЭлектроннойПочты);
Если ЗначениеЗаполнено(ТекстОшибки) Тогда
ТекстыОшибок.Добавить(ТекстОшибки);
ТехническиеПодробности.Добавить(ТекстОшибки);
ОшибкаАутентификации = ОшибкаАутентификации(ТекстОшибки);
Если ОшибкаАутентификации(ТекстОшибки) Тогда
ТекстСообщения.Добавить(НСтр("ru = 'Отправка тестового сообщения не выполнена: не удалось авторизоваться.'"));
Иначе
ТекстСообщения.Добавить(НСтр("ru = 'Отправка тестового сообщения не выполнена.'"));
ТребуетсяПроверкаНастроекИсходящейПочты = Истина;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда
МодульПолучениеФайловИзИнтернета = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернета");
ДиагностикаСоединения = МодульПолучениеФайловИзИнтернета.ДиагностикаСоединения(ПрофильИсходящейПочты.АдресСервераSMTP);
ТехническиеПодробности.Добавить(ДиагностикаСоединения.ЖурналДиагностики);
КонецЕсли;
КонецЕсли;
Иначе
ВыполненныеПроверки.Добавить("- " + НСтр("ru = 'Выполнена отправка тестового сообщения.'"));
КонецЕсли;
КонецЕсли;
Если ПрофильВходящейПочты <> Неопределено Тогда
Протокол = ?(ЗначениеЗаполнено(ПрофильВходящейПочты.АдресСервераIMAP), ПротоколИнтернетПочты.IMAP, ПротоколИнтернетПочты.POP3);
ТекстОшибки = ПроверитьПодключениеКСерверуВходящейПочты(ПрофильВходящейПочты, Протокол);
Если ЗначениеЗаполнено(ТекстОшибки) Тогда
ТекстыОшибок.Добавить(ТекстОшибки);
ТехническиеПодробности.Добавить(ТекстОшибки);
ОшибкаАутентификации = ОшибкаАутентификации(ТекстОшибки);
Если ОшибкаАутентификации(ТекстОшибки) Тогда
ТекстСообщения.Добавить(НСтр("ru = 'Подключение к серверу входящей почты не выполнено: не удалось авторизоваться.'"));
Иначе
ТекстСообщения.Добавить(НСтр("ru = 'Подключение к серверу входящей почты не выполнено.'"));
ТребуетсяПроверкаНастроекВходящейПочты = Истина;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПолучениеФайловИзИнтернета") Тогда
МодульПолучениеФайловИзИнтернета = ОбщегоНазначения.ОбщийМодуль("ПолучениеФайловИзИнтернета");
СерверВходящейПочты = ?(Протокол = ПротоколИнтернетПочты.IMAP, ПрофильВходящейПочты.АдресСервераIMAP, ПрофильВходящейПочты.АдресСервераPOP3);
ДиагностикаСоединения = МодульПолучениеФайловИзИнтернета.ДиагностикаСоединения(СерверВходящейПочты);
ТехническиеПодробности.Добавить(ДиагностикаСоединения.ЖурналДиагностики);
КонецЕсли;
КонецЕсли;
Иначе
ВыполненныеПроверки.Добавить("- " + НСтр("ru = 'Выполнено подключение к серверу входящей почты.'"));
КонецЕсли;
КонецЕсли;
ТехническиеПодробности.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Адрес почты: %1'"), АдресЭлектроннойПочты));
ТехническиеПодробности.Добавить(ОписаниеНастроек(ПрофильИсходящейПочты, ПрофильВходящейПочты));
ТехническиеПодробности.Добавить(ИнформацияОПрограмме());
ОшибкиПодключения = "";
Если ЗначениеЗаполнено(ТекстСообщения) Тогда
ЧастиАдреса = СтрРазделить(АдресЭлектроннойПочты, "@", Истина);
ДоменноеИмя = ЧастиАдреса[ЧастиАдреса.ВГраница()];
ТекстСообщения = СтрСоединить(ТекстСообщения, Символы.ПС);
ТехническиеПодробности = СтрСоединить(ТехническиеПодробности, Символы.ПС + Символы.ПС);
Рекомендации = Новый Массив;
Если ОшибкаАутентификации Тогда
Рекомендации.Добавить(НСтр("ru = 'Проверьте правильность ввода логина и пароля, а также выбранный способ авторизации.'"));
КонецЕсли;
Если ТребуетсяПроверкаНастроекИсходящейПочты Тогда
Рекомендации.Добавить(НСтр("ru = 'Проверьте настройки подключения к серверу исходящей почты.'"));
КонецЕсли;
Если ТребуетсяПроверкаНастроекВходящейПочты Тогда
Рекомендации.Добавить(НСтр("ru = 'Проверьте настройки подключения к серверу входящей почты.'"));
КонецЕсли;
Если ТребуетсяПроверкаНастроекИсходящейПочты Или ТребуетсяПроверкаНастроекВходящейПочты Тогда
Рекомендации.Добавить(НСтр("ru = 'Обратитесь к администратору локальной сети.'"));
КонецЕсли;
Рекомендации = СтрСоединить(Рекомендации, Символы.ПС);
ОшибкиПодключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1
|
|%2
|
|Обратитесь к администратору почтового сервера ""%3"".
|
|============================
|
|Информация для техподдержки:
|
|%4'"), ТекстСообщения, Рекомендации, ДоменноеИмя, ТехническиеПодробности);
КонецЕсли;
ВыполненныеПроверки = СтрСоединить(ВыполненныеПроверки, Символы.ПС);
Если ЗначениеЗаполнено(ОшибкиПодключения) Тогда
ЗаписьЖурналаРегистрации(НСтр("ru = 'Проверка настроек почты'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Предупреждение, , , ОшибкиПодключения);
КонецЕсли;
Результат = Новый Структура;
Результат.Вставить("ВыполненныеПроверки", ВыполненныеПроверки);
Результат.Вставить("ОшибкиПодключения", ОшибкиПодключения);
Результат.Вставить("ТекстыОшибок", ТекстыОшибок);
Возврат Результат;
КонецФункции
Функция ОписаниеНастроек(ПрофильИсходящейПочты, ПрофильВходящейПочты) Экспорт
ОписаниеНастроек = Новый Массив;
СписокСвойствIMAP = "АдресСервераIMAP,ПортIMAP,ИспользоватьSSLIMAP,ПользовательIMAP";
СписокСвойствPOP3 = "АдресСервераPOP3,ПортPOP3,ИспользоватьSSLPOP3,Пользователь";
СписокСвойствSMTP = "АдресСервераSMTP,ПортSMTP,ИспользоватьSSLSMTP,ПользовательSMTP,POP3ПередSMTP";
Профиль = Новый ИнтернетПочтовыйПрофиль();
Если ПрофильВходящейПочты <> Неопределено Тогда
ЗаполнитьЗначенияСвойств(Профиль, ПрофильВходящейПочты);
Профиль.ПортIMAP = ПрофильВходящейПочты.ПортIMAP;
КонецЕсли;
Если ПрофильИсходящейПочты <> Неопределено Тогда
ЗаполнитьЗначенияСвойств(Профиль, ПрофильИсходящейПочты, , СписокСвойствPOP3);
Профиль.ПортIMAP = ПрофильИсходящейПочты.ПортIMAP;
КонецЕсли;
Если ЗначениеЗаполнено(Профиль.АдресСервераSMTP) Тогда
Настройки = Новый Массив;
Для Каждого ИмяСвойства Из СтрРазделить(СписокСвойствSMTP, ",", Ложь) Цикл
Настройки.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1=""%2""'"), ИмяСвойства, Профиль[ИмяСвойства]));
КонецЦикла;
ОписаниеНастроек.Добавить(СтрСоединить(Настройки, ", "));
КонецЕсли;
Если ЗначениеЗаполнено(Профиль.АдресСервераIMAP) Тогда
Настройки = Новый Массив;
Для Каждого ИмяСвойства Из СтрРазделить(СписокСвойствIMAP, ",", Ложь) Цикл
Настройки.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1=""%2""'"), ИмяСвойства, Профиль[ИмяСвойства]));
КонецЦикла;
ОписаниеНастроек.Добавить(СтрСоединить(Настройки, ", "));
КонецЕсли;
Если ЗначениеЗаполнено(Профиль.АдресСервераPOP3) Тогда
Настройки = Новый Массив;
Для Каждого ИмяСвойства Из СтрРазделить(СписокСвойствPOP3, ",", Ложь) Цикл
Настройки.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1=""%2""'"), ИмяСвойства, Профиль[ИмяСвойства]));
КонецЦикла;
ОписаниеНастроек.Добавить(СтрСоединить(Настройки, ", "));
КонецЕсли;
Возврат СтрСоединить(ОписаниеНастроек, Символы.ПС);
КонецФункции
Функция ИнформацияОПрограмме() Экспорт
Результат = Новый Массив;
ИнформацияДляПоддержки = СтандартныеПодсистемыСервер.ИнформацияДляПоддержки();
Результат.Добавить(ИнформацияДляПоддержки);
Результат.Добавить(НСтр("ru = 'Расширения:'"));
УстановитьПривилегированныйРежим(Истина);
Для Каждого Расширение Из РасширенияКонфигурации.Получить() Цикл
Если Расширение.Активно Тогда
Результат.Добавить(СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 (%2)'"),
?(ЗначениеЗаполнено(Расширение.Синоним), Расширение.Синоним, Расширение.Имя), Расширение.Версия));
КонецЕсли;
КонецЦикла;
УстановитьПривилегированныйРежим(Ложь);
Возврат СтрСоединить(Результат, Символы.ПС);
КонецФункции
Функция СобытиеПроверкаПодключенияКПочтовомуСерверу()
Возврат НСтр("ru = 'Проверка подключения к почтовому серверу'", ОбщегоНазначения.КодОсновногоЯзыка());
КонецФункции
#КонецОбласти
#КонецЕсли