#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ОбработчикиСобытий
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
ЗаполнитьОбъектЗначениямиПоУмолчанию();
КонецПроцедуры
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
Если Не ИспользоватьДляОтправки И Не ИспользоватьДляПолучения Тогда
ПроверяемыеРеквизиты.Очистить();
ПроверяемыеРеквизиты.Добавить("Наименование");
Возврат;
КонецЕсли;
МассивНепроверяемыхРеквизитов = Новый Массив;
Если Не ИспользоватьДляОтправки Тогда
МассивНепроверяемыхРеквизитов.Добавить("СерверИсходящейПочты");
КонецЕсли;
Если Не ИспользоватьДляПолучения И ПротоколВходящейПочты = "POP" Тогда
МассивНепроверяемыхРеквизитов.Добавить("СерверВходящейПочты");
КонецЕсли;
Если Не ПустаяСтрока(АдресЭлектроннойПочты) И Не ОбщегоНазначенияКлиентСервер.АдресЭлектроннойПочтыСоответствуетТребованиям(АдресЭлектроннойПочты, Истина) Тогда
ОбщегоНазначения.СообщитьПользователю(
НСтр("ru = 'Почтовый адрес заполнен неверно.'"), ЭтотОбъект, "АдресЭлектроннойПочты");
МассивНепроверяемыхРеквизитов.Добавить("АдресЭлектроннойПочты");
Отказ = Истина;
КонецЕсли;
ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты, МассивНепроверяемыхРеквизитов);
КонецПроцедуры
Процедура ПередУдалением(Отказ)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
ОбщегоНазначения.УдалитьДанныеИзБезопасногоХранилища(Ссылка);
УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры
Процедура ПередЗаписью(Отказ)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
Если Пользователь <> СокрЛП(Пользователь) Тогда
Пользователь = СокрЛП(Пользователь);
КонецЕсли;
Если ПользовательSMTP <> СокрЛП(ПользовательSMTP) Тогда
ПользовательSMTP = СокрЛП(ПользовательSMTP);
КонецЕсли;
Если Не ДополнительныеСвойства.Свойство("НеПроверятьИзменениеНастроек") И Не Ссылка.Пустая() Тогда
ТребуетсяПроверкаПароля = Справочники.УчетныеЗаписиЭлектроннойПочты.ТребуетсяПроверкаПароля(Ссылка, ЭтотОбъект);
Если ТребуетсяПроверкаПароля Тогда
ПроверкаПароля = Неопределено;
Если Не ДополнительныеСвойства.Свойство("Пароль", ПроверкаПароля) Или Не ПарольВведенВерно(ПроверкаПароля) Тогда
ТекстСообщенияОбОшибке = НСтр("ru = 'Не подтвержден пароль для изменения настроек почты.'");
ВызватьИсключение ТекстСообщенияОбОшибке;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ПриЗаписи(Отказ)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
УчетнаяЗаписьДляВосстановленияПароля = РаботаСПочтовымиСообщениямиСлужебный.НастройкиУчетнойЗаписиДляВосстановленияПароля();
Если УчетнаяЗаписьДляВосстановленияПароля.Используется
И УчетнаяЗаписьДляВосстановленияПароля.УчетнаяЗаписьПочты = Ссылка Тогда
Если Пользователи.ЭтоПолноправныйПользователь() Тогда
УстановитьПривилегированныйРежим(Истина);
ПарольSMTP = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Ссылка, "ПарольSMTP");
УстановитьПривилегированныйРежим(Ложь);
Настройки = ДополнительныеНастройкиАутентификации.ПолучитьНастройкиВосстановленияПароля();
Настройки.АдресСервераSMTP = СерверИсходящейПочты;
Настройки.ИмяОтправителя = ИмяПользователя;
Настройки.ИспользоватьSSL = ИспользоватьЗащищенноеСоединениеДляИсходящейПочты;
Настройки.ПарольSMTP = ПарольSMTP;
Настройки.ПользовательSMTP = ПользовательSMTP;
Настройки.ПортSMTP = ПортСервераИсходящейПочты;
ДополнительныеНастройкиАутентификации.УстановитьНастройкиВосстановленияПароля(Настройки);
Иначе
ВызватьИсключение НСтр("ru='Настройки почты используются для восстановления пароля и
|могут быть изменены только администратором.'");
КонецЕсли;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Процедура ЗаполнитьОбъектЗначениямиПоУмолчанию()
ИмяПользователя = НСтр("ru = '1С:Предприятие'");
ИспользоватьДляПолучения = Ложь;
ИспользоватьДляОтправки = Ложь;
ОставлятьКопииСообщенийНаСервере = Ложь;
ПериодХраненияСообщенийНаСервере = 0;
ВремяОжидания = 30;
ПортСервераВходящейПочты = 110;
ПортСервераИсходящейПочты = 25;
ПротоколВходящейПочты = "POP";
Если Предопределенный Тогда
Наименование = НСтр("ru = 'Системная учетная запись'");
КонецЕсли;
КонецПроцедуры
Функция ПарольВведенВерно(ПроверкаПароля)
Если АвторизацияСПомощьюПочтовогоСервиса Тогда
УстановитьПривилегированныйРежим(Истина);
Токены = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Ссылка, "ТокенДоступа,ТокенОбновления");
УстановитьПривилегированныйРежим(Ложь);
КонтрольнаяСумма = ОбщегоНазначения.КонтрольнаяСуммаСтрокой(Токены.ТокенДоступа + Токены.ТокенОбновления);
Возврат КонтрольнаяСумма = ПроверкаПароля;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
Пароли = ОбщегоНазначения.ПрочитатьДанныеИзБезопасногоХранилища(Ссылка, "Пароль,ПарольSMTP");
УстановитьПривилегированныйРежим(Ложь);
ПроверяемыеПароли = Новый Массив;
Если ЗначениеЗаполнено(Пароли.Пароль) Тогда
ПроверяемыеПароли.Добавить(Пароли.Пароль);
КонецЕсли;
Если ЗначениеЗаполнено(Пароли.ПарольSMTP) Тогда
ПроверяемыеПароли.Добавить(Пароли.ПарольSMTP);
КонецЕсли;
Для Каждого ПроверяемыйПароль Из ПроверяемыеПароли Цикл
Если ПроверкаПароля <> ПроверяемыйПароль Тогда
Возврат Ложь;
КонецЕсли;
КонецЦикла;
Возврат Истина;
КонецФункции
#КонецОбласти
#Иначе
ВызватьИсключение НСтр("ru = 'Недопустимый вызов объекта на клиенте.'");
#КонецЕсли