Для начала прочитаем содержимое архива (чтение архива zip на php). Во встречающихся на просторах интернета примерах, зачастую игнорируется тот факт, что имена файлов могут быть в кириллице.В результате пользователи видят «крякозябры». А zip хранит имена файлов, указывая их не в кодировке UTF-8, а в кодировке cp866 (видимо из соображения совместимости). По крайне мере на Windows. Поэтому имена файлов перед употреблением, нужно переформатировать в UTF-8.
Прилетела задача прочитать сообщение из почтового ящика по протоколу IMAP. Последнее из пришедших. В принципе в 1С есть штатный функционал для чтения почты, поэтому пример всё сам расскажет за себя:
Процедура ЧитнутьНаСервереImap()
Профиль = Новый ИнтернетПочтовыйПрофиль;
Профиль.АутентификацияPOP3 = Ложь;
Профиль.АутентификацияSMTP = Ложь;
// IMAP
Профиль.ИспользоватьSSLIMAP = Истина;
Профиль.АдресСервераIMAP = "цукацу-укацука.уцкацук.ru";
Профиль.ПортIMAP = "993";
Профиль.ПользовательIMAP = "укацу@укацукау.ru";
Профиль.ПарольIMAP = "цукацукацук";
Профиль.ТолькоЗащищеннаяАутентификацияIMAP=Ложь;
Почта = Новый ИнтернетПочта;
Сообщ = Новый СообщениеПользователю();
Почта.Подключиться(Профиль, ПротоколИнтернетПочты.IMAP); //ПротоколИнтернетПочты.POP3
заголовки=Почта.ПолучитьЗаголовки();
если заголовки.Количество()>0 тогда
ПоследнийЗаголовок=Новый Массив();
ПоследнийЗаголовок.Добавить(заголовки[заголовки.Количество()-1]);
МассивСообщений = Новый Массив;
МассивСообщений = Почта.Выбрать(Ложь,ПоследнийЗаголовок);
ТекстСообщения=МассивСообщений[0].тексты[0].Текст;
сообщить(ТекстСообщения);
конецесли;
Почта.Отключиться();
КонецПроцедуры
Из особенностей логики — сначала вычитываю заголовки, т.к. если почты много, то чтение писем будет ОЧЕНЬ долгим. Далее получаю последний по счету заголовок, и вычитываю текст конкретно уже этого письма.
Задача: установить наисвежайшую версию веб сервера apache (установка apache из исходников). В репозитарии, версия довольно старая. Поэтому единственное решение — ставить apache из исходных кодов.
Сначала подготовлю ОС, для возможности компиляции (инструментарий):
Далее необходимо зайти на сайт https://httpd.apache.org/download.cgi и скачать необходимую версию с исходниками httpd и APR (https://apr.apache.org/download.cgi) и APR-UTIL
Распакуем их:
tar xfvj *.bz2
Далее необходимо переместить исходники APR в папку используемых библиотек httpd:
Задача добавление рабочих дней к дате (добавить рабочие дни к дате) встречается довольно часто. И штатно должна решаться с помощью стандартного функционала БСП — «Производственный календарь». Например так:
Функция ДобавитьКДатеРабочиеДни(ДатаНач,ЧислоРабочихДней) экспорт
Запрос=Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
| ВЫБОР
| КОГДА РегламентированныйПроизводственныйКалендарь.ВидДня = &РабочийДень
| ИЛИ РегламентированныйПроизводственныйКалендарь.ВидДня = &ПредпраздничныйДень
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ КАК ЧислоРабочихДней,
| РегламентированныйПроизводственныйКалендарь.ДатаКалендаря КАК ДатаКалендаря
|ПОМЕСТИТЬ ТЗ
|ИЗ
| РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
|ГДЕ
| РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &ДатаНач И &ДатаКон
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ТЗ.ДатаКалендаря,
| СУММА(ТЗ1.ЧислоРабочихДней) КАК ЧислоРабочихДней
|ПОМЕСТИТЬ ТЗНакопл
|ИЗ
| ТЗ КАК ТЗ
| ЛЕВОЕ СОЕДИНЕНИЕ ТЗ КАК ТЗ1
| ПО (ТЗ1.ДатаКалендаря <= ТЗ.ДатаКалендаря)
|
|СГРУППИРОВАТЬ ПО
| ТЗ.ДатаКалендаря
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| МАКСИМУМ(ТЗ.ДатаКалендаря) КАК ДатаКалендаря
|ИЗ
| ТЗНакопл КАК ТЗ
|ГДЕ
| ТЗ.ЧислоРабочихДней = &ЧислоРабочихДней";
Запрос.УстановитьПараметр("ДатаНач", ДатаНач);
ЧислоНедель = Цел(ЧислоРабочихДней/5+0.5);
ЧислоВыходныхДней = ЧислоНедель*2;
МаксимальноеКоличествоПраздничныхДнейПодряд = 8; //РождественскиеКаникулы
ДатаКон = ДатаНач+(ЧислоВыходныхДней+ЧислоРабочихДней+МаксимальноеКоличествоПраздничныхДнейПодряд)*24*60*60;
Запрос.УстановитьПараметр("ДатаКон",ДатаКон);
Запрос.УстановитьПараметр("ЧислоРабочихДней",ЧислоРабочихДней);
Запрос.УстановитьПараметр("РабочийДень", Перечисления.ВидыДнейПроизводственногоКалендаря.Рабочий);
Запрос.УстановитьПараметр("ПредпраздничныйДень", Перечисления.ВидыДнейПроизводственногоКалендаря.Предпраздничный);
Выборка = Запрос.Выполнить().Выбрать();
Результат = 0;
Если Выборка.Следующий() Тогда
Результат = КонецДня(Выборка.ДатаКалендаря)+1;
Конецесли;
Возврат Результат;
КонецФункции
Однако не всё же не все конфигурации содержат производственный календарь. Например почему-то обделено Делопроизводство 2.0. Что-бы не городить огород,, решил задачу «в лоб», без учёта праздничных дней — просто проверяю выпадение даты на субботу-воскресенье. В моём случае этого хватило.
Функция ДобавитьКДатеРабочиеДни(ДатаПроверки,дней)
добавлено=0;
пока добавлено<>дней цикл
ДатаПроверки=ДатаПроверки+86400;
Если ДеньНедели(ДатаПроверки) <> 6 ИЛИ ДеньНедели(ДатаПроверки) <> 7 Тогда
добавлено=добавлено+1;
конецесли;
конеццикла;
Возврат ДатаПроверки;
КонецФункции
Есть множество статей как отправить почту из консоли терминала Linux. Но в основной своей массе, это всё касается уже настроенного почтового сервера. А если нужно отправить почту используя настройки SMTP с авторизацией, указанием кодировки и вложением в виде файла? Их есть у меня (с). Ниже пример: