Cпособы отправки письма из 1С

Итак, рассмотрю способы отправки письма из 1С. На самом деле навелосипедить можно и больше, но мне хватит 😉

1) На «прямую», без использования БСП:

	Профиль = Новый ИнтернетПочтовыйПрофиль;
	Профиль.АдресСервераSMTP = "цукацукацука";
	Профиль.ПортSMTP = 465;
	
	Профиль.POP3ПередSMTP = ложь;
	Профиль.АутентификацияSMTP = СпособSMTPАутентификации.ПоУмолчанию;
	
	Профиль.ИспользоватьSSLSMTP = ложь;
	
	Профиль.ТолькоЗащищеннаяАутентификацияSMTP = ложь;
	
	Профиль.Пользователь = "vуцкацука1-Noreply@укацукацука.ru";
	Профиль.Пароль = "Hцукацукаg";
	Профиль.ПользовательSMTP = "vцукауцкаly@цукацука.ru";
	Профиль.ПарольSMTP = "укацукацу";
	
	//Профиль.Таймаут = 60;
	
	Почта = Новый ИнтернетПочта;
	                                 
	Сообщить("Проверка cоединения..");
	Попытка
		Почта.Подключиться(Профиль, ПротоколИнтернетПочты.POP3);
		Сообщить("POP3: соединение ОК");
		Сообщить("SMTP: соединение ОК");
	Исключение
		Сообщить(ОписаниеОшибки());
	КонецПопытки;
	
	
	Попытка
		Почта.Подключиться(Профиль);
		
		Письмо = Новый ИнтернетПочтовоеСообщение;
		Письмо.Тема = Заголовок;
	
		// формируем адрес получателя	
		Получатель = Письмо.Получатели.Добавить(Кому);
		Получатель.ОтображаемоеИмя = Кому;
	
		// добавляем к письму имя отправителя
		Письмо.ИмяОтправителя              = "Сцукауцкания";
		Письмо.Отправитель.ОтображаемоеИмя = "Сцукаувцукацукания";
		сообщить(константы.СК_Почта_Отправитель.Получить());
		Письмо.Отправитель.Адрес           = "noreply@цукаука.ru";
	
		// добавляем текст
		Текст = Письмо.Тексты.Добавить(Тело);
		Текст.ТипТекста = ТипТекстаПочтовогоСообщения.ПростойТекст;
		
		Почта.Послать(Письмо, , ПротоколИнтернетПочты.SMTP);
		
		Сообщить("SMTP: посылка ОК");
		
	Исключение
		Сообщить(ОписаниеОшибки());
	КонецПопытки;

2) Используя БСП «Свежих» версий. Не могу сказать точно с какой версий, года примерно с двадцатого:

    УчетнаяЗаписьПочты = РаботаСПочтовымиСообщениями.СистемнаяУчетнаяЗапись(); 
 
	попытка                                                                                  
	ПараметрыСообщения = Новый Структура;
	ПараметрыСообщения.Вставить("Кому",     Кому);
	ПараметрыСообщения.Вставить("Тема",     Заголовок);
	ПараметрыСообщения.Вставить("Тело",     Тело);

		Письмо = РаботаСПочтовымиСообщениями.ПодготовитьПисьмо(УчетнаяЗаписьПочты, ПараметрыСообщения);
		РаботаСПочтовымиСообщениями.ОтправитьПисьмо(УчетнаяЗаписьПочты, Письмо);		
	исключение
		сообщить("ой!");
		Сообщить(ОписаниеОшибки());
	конецпопытки;

3) Используя БСП «старых версий»… Очень старых… Где-то года 2015 и ранее:

УчетнаяЗаписьПочты = РаботаСПочтовымиСообщениями.ПолучитьСистемнуюУчетнуюЗапись();
ПараметрыПисьма = Новый Структура("Кому, Тема, Тело,ТипТекста", email, "цуацукау", тело,"HTML");
		РаботаСПочтовымиСообщениями.ОтправитьСообщение(УчетнаяЗаписьПочты, ПараметрыПисьма);

4) Еще один вариант для стародревней БСП:

	 УчетнаяЗаписьПочты = РаботаСПочтовымиСообщениями.СистемнаяУчетнаяЗапись(); 				 
					попытка                                                                                  
					ПараметрыСообщения = Новый Структура;
					ПараметрыСообщения.Вставить("ТипТекста","HTML");
					ПараметрыСообщения.Вставить("Кому",     "gribукмыукru");
					ПараметрыСообщения.Вставить("Тема",     "Ошибка приема данных о задолженнукмцу");
					ПараметрыСообщения.Вставить("Тело",     "Воукмук)!");
					РаботаСПочтовымиСообщениями.ОтправитьПочтовоеСообщение(УчетнаяЗаписьПочты, ПараметрыСообщения);		
					исключение
						ЗаписьЖурналаРегистрации("Ошибка отправки ответа на письмо", УровеньЖурналаРегистрации.Ошибка,,ОписаниеОшибки(),);		
					конецпопытки;				
			конецесли;	

infostart.ru Всё!

К сожалению в связи с последними событиями со стороны infostart, а именно:

  • вывод денежных средств теперь возможен только для самозанятых, что для меня не приемлемо
  • односторонний разрыв ранее подписанного договора о сотрудничестве по инициативе infostart

Вынужден признать, что для меня infostart кончился, и далее публиковать свои разработки и как либо сотрудничать с этим ресурсом не считаю возможным.

Попытаюсь добиться чтобы вернули деньги которые остались на балансе и удалили мой профиль вместе со всеми публикациями.

Русификация дисплея SSD1306

В интернете полно инструкций по русификации данного дисплея. Фактически все рекомендации сводятся к замене в папке C:\Users\USER\Documents\Arduino\libraries\Adafruit_GFX_Library (у вас другой путь) файла glcdfont.c вот этим файлом, и далее использованием вот этой функции для конвертации UTF-8 в кодировку windows-1251:

String utf8rus(String source){
  int i,k;
  String target;
  unsigned char n;
  char m[2] = { '0', '\0' };
  k = source.length(); i = 0;
  while (i < k) {
    n = source[i]; i++;
    if (n >= 0xC0) {
      switch (n) {
        case 0xD0: {
          n = source[i]; i++;
          if (n == 0x81) { n = 0xA8; break; }
          if (n >= 0x90 && n <= 0xBF) n = n + 0x30;
          break;
        }
        case 0xD1: {
          n = source[i]; i++;
          if (n == 0x91) { n = 0xB8; break; }
          if (n >= 0x80 && n <= 0x8F) n = n + 0x70;
          break;
        }
      }
    }
    m[0] = n; target = target + String(m);
  }
return target;
}

У меня увы, этот метод не сработал, как бы я не бился. И файл со скетчем переводил и в UTF-8 и в кодировку windows-1251 и чего только не делал. Ну не работает и всё тут. Потом на какое-то время заработало, потом опять перестало. Разобраться почему я так и не смог. В результате пошел другим путем — написал онлайн конвертор UTF-8 в восьмеричный формат кодировки windows-1251, после чего стало возможным вставлять в IDE код вида:

display.print("\307\300\317\323\321\312..."); 

Пусть не сильно читаемо в коде, но зато работает максимально стабильно. Конвертер ниже:



Кроме того, обнаружил еще одну не объяснимую ошибку при работе с данным дисплеем: если в программе интенсивно используется вывод в консоль при помощи Serial.println то на дисплее возникают артефакты в виде шума.

MySQL: выгрузка результата запроса в файл

Одним из способов является — воспользоваться встроенным функционалом MySQL. Например так мы выгрузим результат запроса в файл формата csv:

select  
	b_form_result.ID, 
	b_form_result.DATE_CREATE, 
	b_form_result.STATUS_ID, 
	b_form_result.FORM_ID, 
	b_form_result_answer.USER_TEXT, 
	b_form_result_answer.ANSWER_TEXT_SEARCH, 
	b_form_result_answer.ANSWER_TEXT, 
	concat("https://wfcwerfe.ru/upload/",SUBDIR,"/",b_file.FILE_NAME) 
from    
	b_form_result  
	left join b_form_result_answer on b_form_result_answer.RESULT_ID=b_form_result.ID 
	left join b_file on b_file.ID=b_form_result_answer.USER_FILE_ID 
where 
	b_form_result.TIMESTAMP_X>"2023-12-06 16:37:26" 
	INTO OUTFILE '/tmp/res.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';

Исправление распространённых ошибок при тестировании конфигурации Bitrix

Всё ниже перечисленное применимо к Битрикс «Управление сайтом»

Ошибка! Время отличается на 10800 секунд

Прежде чем применять предложенное исправление, необходимо проверить что в консоли терминала и консоли БД время установлено верно.

Исправление: в файле /bitrix/php_interface/after_connect.php нужно добавить строчку:

$DB->Query("SET LOCAL time_zone='".date('P')."'");

Ошибка! Не настроен запуск cron_events.php на cron, последний агент отработал больше суток назад.

Исправление: в /etc/crontab добавить строчку вида:

* * * * *       sleep $((RANDOM\%3)); flock -x -n /tmp/cron_site.lock -c "[ -f /var/www/www-root/data/www/erfwerf.ru/bitrix/php_interface/cron_events.php ] && { sleep $((RANDOM\%50)); timeout 3600 php -f /var/www/www-root/data/www/erfwerf.ru/bitrix/php_interface/cron_events.php; }" >/dev/null 2>&1

Работа с сокетами: Ошибка! Не работает

Исправление:

  • добавить в /etc/hosts имя домена
  • обновить корневые сертификаты:
yum install ca-certificates
update-ca-trust
  • проверить нет ли проблем с сертификатом при выполнении в терминале на сервере
wget https://adiuoe.ru

Если выведет ошибку — установить корректные ssl сертификаты

Недоступны для чтения или записи

При проверке ругается, что часть файлов/папок не доступны для чтения/записи. Для начала выполним команды в корневой папке сайта:

find . -type d -exec chmod 775 {} \;
find . -type f -exec chmod 664 {} \; 

И выставим владельцев (у вас могут быть свои):

find . -type d -exec chown nginx:apache {} \;
find . -type f -exec chown nginx:apache {} \;

Работа с файлами кеша: Ошибка! Не работает

Сервер apache не имеет доступа в папку /bitrix/cache

chmod 777 bitrix/cache/
1 40 41 42 43 44 309