В начало

Чтение почты и оправка ее в Телеграм

 

Листинг. Модуль внешней обработки

&НаСервере

Функция СозданиеИнтернетПрофиля(Знач ТекЯщик)

 

    ПочтовыйПрофиль = Новый ИнтернетПочтовыйПрофиль;

    ПочтовыйПрофиль.ВремяОжидания = 300;

           

            // Исходящая почта

            ПочтовыйПрофиль.АдресСервераIMAP = ТекЯщик.АдресСервераIMAP;

            ПочтовыйПрофиль.ПользовательIMAP = ТекЯщик.ПользовательIMAP;

            ПочтовыйПрофиль.ПарольIMAP = ТекЯщик.ПарольIMAP;

            ПочтовыйПрофиль.ПортIMAP = ТекЯщик.ПортIMAP;//993;//143, 993

           

            Попытка

                        ПочтовыйПрофиль.ИспользоватьSSLIMAP = Истина;

            Исключение

                        //Сообщить("Не работает служба SSL IMAP! Для корректной работы необходима платформа 1С версии не менее 8.3!");

            КонецПопытки;       

 

            ПочтовыйПрофиль.АдресСервераSMTP   = ТекЯщик.АдресСервераSMTP;

            ПочтовыйПрофиль.ПортSMTP           = ТекЯщик.ПортSMTP;//587;//465, 587, 25, 2525 (шифрование: ssl/tls/startls)

            ПочтовыйПрофиль.ПользовательSMTP   = ТекЯщик.ПользовательSMTP;

            ПочтовыйПрофиль.ПарольSMTP         = ТекЯщик.ПарольSMTP;

            ПочтовыйПрофиль.АутентификацияSMTP = СпособSMTPАутентификации.Login;

           

            Попытка

                        //ПочтовыйПрофиль.ИспользоватьSSLSMTP = Истина;

            Исключение

                        //Сообщить("Не работает служба SSL SMTP! Для корректной работы необходима платформа 1С версии не менее 8.3!");

            КонецПопытки;

 

            // Входящая почта

            //Если ФормироватьPOP3Профиль Тогда

            //ПочтовыйПрофиль.АдресСервераPOP3 = "mail.gktower.ru";

            //ПочтовыйПрофиль.Пользователь = "rsk\golovin.vv";

            //ПочтовыйПрофиль.Пароль = ЭтаФорма.Пароль;         

            //ПочтовыйПрофиль.ПортPOP3 = 995;//110, 995

            //ПочтовыйПрофиль.АутентификацияPOP3 = СпособPOP3Аутентификации.Обычная;

           

            Попытка                                         

                        //ПочтовыйПрофиль.ИспользоватьSSLPOP3 = Истина;

            Исключение

                        //Сообщить("Не работает служба SSL POP3! Для корректной работы необходима платформа 1С версии не менее 8.3!");

            КонецПопытки;

 

    Возврат ПочтовыйПрофиль;

 

КонецФункции

 

&НаСервере

Функция ПолучитьПисьмаСПочтовогоСервера(Знач ТекЯщик)

           

            Профиль = СозданиеИнтернетПрофиля(ТекЯщик);

            Почта = Новый ИнтернетПочта;

           

            Попытка

                        Почта.Подключиться(Профиль, ПротоколИнтернетПочты.IMAP);

            Исключение

                        Сообщить(ОписаниеОшибки());

                        Возврат Неопределено;

            КонецПопытки;

           

            мПисьма = Новый Массив;

            мПисьма = Почта.Выбрать(Ложь);

           

            Если мПисьма.Количество() > 0 Тогда

                       

                        стПисьма = Новый Структура;

                        стПисьма.Вставить("Почта", Почта);

                        стПисьма.Вставить("мПисьма", мПисьма);

                       

                        Возврат стПисьма;

            Иначе

                        Возврат Неопределено;

            КонецЕсли;

                       

КонецФункции

 

Функция ПарсингСообщения(Знач Текст)

            //Диспетчеризация ОКК: пр.Юбилейный 74 ( Веснушки )/Отклонение от задания отопления

            //Время срабатывания: 2025-04-20 23:15:59 +3H

 

            мСообщение = СтрРазделить(СокрЛП(Текст), Символы.ПС,);

            стСообщение = Новый Структура;

           

            Если мСообщение.Количество() = 2 Тогда

                        //Первая строка

                        //Диспетчеризация ОКК: пр.Юбилейный 74 ( Веснушки )/Отклонение от задания отопления

                        Строка1 = мСообщение[0];

                        Строка1 = СокрЛП(СтрЗаменить(Строка1, "Диспетчеризация ОКК:" , ""));

                        мСтрока1 = СтрРазделить(Строка1, "/",);

                        стСообщение.Вставить("Адрес", мСтрока1[0]);

                        стСообщение.Вставить("Сообщение", мСтрока1[1]);

                       

                        //Вторая строка

                        //Время срабатывания: 2025-04-20 23:15:59 +3H

                        Строка2 = мСообщение[1];

                        Строка2 = СокрЛП(СтрЗаменить(Строка2, "Время срабатывания:", ""));

                        мСтрока2 = СтрРазделить(Строка2, "+",);

                        Строка22 = мСтрока2[0];

                        Строка22 = СтрЗаменить(Строка22, "-", "");

                        Строка22 = СтрЗаменить(Строка22, ":", "");

                        Строка22 = СтрЗаменить(Строка22, " ", "");

                        стСообщение.Вставить("ВремяСрабатывания", Дата(Строка22));

            Иначе

                        Возврат Неопределено;

            КонецЕсли;

                       

            Если ЗначениеЗаполнено(стСообщение) Тогда

                        Возврат стСообщение;

            Иначе

                        Возврат Неопределено;

            КонецЕсли;

           

КонецФункции        

 

&НаСервере

Процедура ЗаписатьВЖурнал(Знач ТекстСообщения)

 

            стСообщение = ПарсингСообщения(ТекстСообщения);

           

            //===================

            //Записываем в р/с

            //===================

            МЗ = РегистрыСведений.БАШНЯ_ЖурналСообщенийДуПпаИтп.СоздатьМенеджерЗаписи();

           

            МЗ.Период = ТекущаяДата();

            МЗ.Адрес = стСообщение.Адрес;

            МЗ.Сообщение = стСообщение.Сообщение;

            МЗ.ВремяСрабатывания = стСообщение.ВремяСрабатывания;

           

            Попытка

                        МЗ.Записать();

            Исключение

            КонецПопытки                    

           

КонецПроцедуры

 

Функция ОтправкаТекстовыхСообщенийВТелеграм(Знач Токен, Знач ChatId, Знач ТекстСообщения) Экспорт

           

            Попытка

                        Соединение = Новый HTTPСоединение("api.telegram.org",443,,,,15,Новый ЗащищенноеСоединениеOpenSSL());

                        Запрос = Новый HTTPЗапрос("bot" + Токен + "/sendMessage?chat_id=" + ChatId + "&parse_mode=HTML&text=" + ТекстСообщения);

                        Ответ = Соединение.ВызватьHTTPМетод("GET", Запрос);                   

                       

                        Если Ответ.КодСостояния = 200 Тогда

                                  

                                   ЧтениеJSON = Новый ЧтениеJSON();

                                    ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку(КодировкаТекста.UTF8));

                                   РезСтруктура = ПрочитатьJSON(ЧтениеJSON);

                                   ЧтениеJSON.Закрыть();

                                                                      

                        Иначе                        

                        КонецЕсли;

                       

            Исключение

                        //Сообщить(ОписаниеОшибки());

                        //Сообщить(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));

            КонецПопытки

           

КонецФункции

 

Процедура Пауза(Секунды)

 

            ВремяОкончания = ТекущаяДата() + Секунды;

           

            Пока ТекущаяДата() <= ВремяОкончания Цикл   

            КонецЦикла;

           

КонецПроцедуры

 

&НаСервере

Процедура ОтправитьТекстовоеСообщениеВТелеграм(Знач Текст)

 

            Выборка = Справочники.ПараметрыРассылки.Выбрать();

           

            Пока Выборка.Следующий() Цикл 

                        Если Выборка.ПометкаУдаления = Ложь Тогда

                                  

                                   Если ЗначениеЗаполнено(Текст) Тогда

                                               ОтправкаТекстовыхСообщенийВТелеграм("12345:abcdef", Выборка.ChatId, СокрЛП(Текст));

                                   КонецЕсли;

                                                                      

                                   Пауза(2);

                        КонецЕсли;

            КонецЦикла;

 

КонецПроцедуры

 

&НаСервере

Процедура ПрочитатьПочтуНаСервере(Знач ТекЯщик)

            стПисьма = ПолучитьПисьмаСПочтовогоСервера(ТекЯщик);

           

            Если ЗначениеЗаполнено(стПисьма) Тогда

                        мПисьма = стПисьма.мПисьма;

                        Почта = стПисьма.Почта;   

            Иначе

                        Возврат;

            КонецЕсли;   

           

            Если ЗначениеЗаполнено(мПисьма) Тогда

                        Для Каждого Эл Из мПисьма Цикл

                                   Тема = Эл.Тема;

                                   Тексты = Эл.Тексты;

                                   Если ЗначениеЗаполнено(Тексты) Тогда

                                               Для Каждого Эл2 Из Тексты Цикл

                                                           Текст = Эл2.Текст;

                                                           //=====================

                                                           //Отправляем в Телеграм

                                                           //=====================

                                                           ТекстСообщения = "<b>‼</b>" + Символы.ПС + Текст + Символы.ПС + "‼";

                                                           ОтправитьТекстовоеСообщениеВТелеграм(ТекстСообщения);

                                                          

                                                           //===========================

                                                           //Записываем сообщение в Журнал

                                                           //===========================

                                                           ЗаписатьВЖурнал(Текст);                     

                                                          

                                               КонецЦикла;//Тексты          

                                   КонецЕсли;   

                        КонецЦикла;//Письма         

            КонецЕсли;   

           

            //Массивы для удаления сообщений

            мСообщений = Новый Массив;

            мИД = Новый Массив; 

           

            Для Каждого Эл Из мПисьма Цикл      

                        мСообщений.Добавить(Эл);

                        мИД.Добавить(Эл.Идентификатор[0]);

            КонецЦикла;

 

            Почта.УдалитьСообщения(мПисьма);//Достаточно так

            //Почта.УдалитьСообщения(мСообщений);

            //Почта.УдалитьСообщения(мИД);

            Почта.ОчиститьУдаленныеСообщения();//Для IMAP

            Почта.Отключиться();         

           

КонецПроцедуры

 

&НаСервере

Процедура ПереборЯщиков() 

           

            Выборка = Справочники.НастройкиПочты.Выбрать();

           

            Пока Выборка.Следующий() Цикл

                        Если НЕ Выборка.ПометкаУдаления Тогда

                                   ПрочитатьПочтуНаСервере(Выборка);

                        КонецЕсли;   

            КонецЦикла;

           

КонецПроцедуры

 

////////////////////////////////////////////////////////  

&НаКлиенте

Процедура Отладка(Команда)

            ПереборЯщиков();

КонецПроцедуры