Блог им. BITE4SAVE

Алготрейдинг на QLUA под QUIK - снова под мобильным контролем через Email.

Всех приветствую !
Не складывалось как-то последнее время надежно получать сообщения от помощника на QLUA под Quik.
То telegram работает нестабильно, то LUA Socket отвалился (не знаю, может это связано с обновлением Quik и появлении целочисленного типа данных).
MAX так вообще позволяет юзать чат-боты только юрлицам и ИП.
И задумал я, немного погуглив, поиспользовать Email-оповещения на мобильное приложение Яндекс.Почта, используя связку PHP + PHPmailer.
Оказалось, за пару дней получился вполне приличный результат.
Если устраивает средняя задержка оповещения от 3 до 45 секунд (бывает меньше, бывает намного больше — от почты зависит), можно посмотреть на этот вариант.
Мне он зашел тем, что не надо под новую версию Quik пересобирать никакие библиотеки, не нужен никакой почтовый сервер с необходимостью его настраивать.
Код на QLUA занял ровно 1 страницу.
А теперь — как это приготовить.
Во-первых, идем на сайт php.net, скачиваем ZIP-архив PHP, соответствующий ОС.
www.php.net/downloads.php?os=windows&osvariant=windows-downloads&version=default&multiversion=Y
В моем случае — VS17 x64 Thread Safe.
Распаковываем, например, в папку C:\PHP\.
Редактируем путь переменных среды.
Запускаем cmd из меню Пуск Выполнить, идем в папку PHP: cd \ <Enter>, затем cd php <Enter>, затем control sysdm.cpl <Enter>.
В Свойствах системы переходим во вкладку Дополнительно, нажимаем кнопку Переменные среды...
В окне Системные переменные выбираем строку Path.
Нажимаем кнопку Изменить.
В окне Изменить переменные среды нажимаем кнопку Создать. Вводим текст C:\PHP\
Нажимаем 3 раза ОК для закрытия всех дополнительных окон.
Проверяем версию PHP в окне консоли — php --version
Идем в папку C:\PHP\. Находим файл php.ini-development.ini, копируем файл в эту же папку под именем php.ini.
Редактируем файл — открываем, находим строчку ;extension_dir = «ext», убираем точку с запятой (раскомментирование), находим строчку ;extension=openssl, убираем точку с запятой, сохраняем файл.
Проверяем работу в командной консоли
c:\PHP\php -r «echo 'hello world';»
c:\PHP\php -h
Если получаем сообщение об ошибке — отсутствует VCRUNTIME140.dll, устанавливаем подходящий пакет Microsoft Visual C++ Redistributable (Visual Studio), скачав и установив нужный файл.
learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist?view=msvc-170
Например, у меня ОС Windows Server 2019, скачал файл VC_redist.x64.exe.
Устанавливаем пакет.
Скачиваем PHPMailer.
github.com/PHPMailer/PHPMailer
download PHPMailer as a zip file
Распаковываем архив (файлы и подпапки) в папку c:\php\PHPMailer
Заходим в Яндекс.Почта, Настройки (шестерёнка), Все настройки, Почтовые программы, разрешаем доступ к почтовому ящику с помощью почтовых клиентов.
Нажимаем ссылку Пароли приложений, далее действуем по инструкции Яндекса, создаем пароль для почты, копируем и запоминаем его.
В итоге — редактируем скрипт QLUA.
В строках правим address@yandex.ru на реальный адрес, Имя Фамилия правим на данные аккаунта Яндекса, указываем созданный раньше password.
Выбираем букву виртуального диска или просто диска, создаем на нем папку temp, например, z:\temp\, помещаем в нее файл-вложение, например, signal.txt, правим в скрипте имя файла на нужное, запускаем скрипт — должно прийти сообщение с почты на почту с вложением.
При ненадобности можно удалить строку с приложением к письму.
Чтобы работать с другими почтами — ссылка.
snipp.ru/php/smtp-phpmailer
Но для работы, например, с Google (GMail), возможно, помимо номера порта надо править строку
'PHPMailer::ENCRYPTION_SMTPS;' на 'PHPMailer::ENCRYPTION_STARTTLS; (для шифрования TLS) или задать шифрование ssl или tls,
например, так: '$mail->SMTPSecure = «ssl»;' или так: '$mail->SMTPSecure = «tls»;'
Возможно, придется подправить и файл php.ini .
Не пробовал.
В заключение в почте надо создать папку для сообщений и правило, чтобы сообщения от Quik попадали в эту папку, чтобы через некоторое время их можно было удалить нажатием одной кнопки, и включить уведомления.
Показалось, что уведомления приходят быстрее, если приложение электронной почты открыто.
Всё !

SIGNALMESSAGE = 'MXU6 SHORT' -- текст Email-сообщения (может быть расширен до HTML-страницы в таблице)
	RAMDISK = 'z:' -- буква виртуального диска для работы
	ATTACHFILENAME = 'signal.txt' -- имя файла-приложения к письму, должен быть в папке RAMDISK..'\temp\'	
	PHPFILENAME = RAMDISK..'\\temp\\yamessage.php' -- временный перезаписываемый PHP-файл для отправки письма
	
function OnInit()	
	is_run = true
end

function OnStop()
	is_run = false
end

function main()
		if is_run then
		SendEmailMessage(SIGNALMESSAGE, ATTACHFILENAME)
		end
end		

-- Функция отправки сообщения на Email : Внимание ! Здесь кодировка - UTF-8.
function SendEmailMessage(SIGNALMESSAGE, ATTACHFILENAME)
	local phpbegin = {
	'<?php',
	'use PHPMailer\\PHPMailer\\PHPMailer;',
	'use PHPMailer\\PHPMailer\\Exception;',
	'require_once \'c:/PHP/PHPMailer/src/Exception.php\';',
	'require_once \'c:/PHP/PHPMailer/src/PHPMailer.php\';',
	'require_once \'c:/PHP/PHPMailer/src/SMTP.php\';',
	'$mail = new PHPMailer(true);',
	'try {',
	'$mail->isSMTP();',
	'$mail->SMTPAuth = true;',
	'$mail->SMTPDebug = 0;',
	'$mail->Host = \'ssl://smtp.yandex.ru\';',
	'$mail->Port = 465;',
	'$mail->Username = \'address@yandex.ru\';',
	'$mail->Password = \'password\';',
	'PHPMailer::ENCRYPTION_SMTPS;',
	'$mail->setFrom(\'address@yandex.ru\', \'Имя Фамилия\');',
	'$mail->addAddress(\'address@yandex.ru\', \'Имя Фамилия\');',
	'$mail->isHTML(true);',
	'$mail->Subject = \'QUIK MESSAGE\';'
	}
	local phpend = {	
	'$mail->msgHTML($body);',
	'$mail->addAttachment(\''..RAMDISK..'/temp/'..ATTACHFILENAME..'\');',
	'$mail->send();',
	'echo \'Письмо успешно отправлено!\';',
	'} catch (Exception $e) {',
	'echo \'Ошибка при отправке письма: {$mail->ErrorInfo}\';',
	'}',
	'?>'
	}
	-- Получаем системные дату и время
	local sysdate = os.sysdate()
	local SYSDATETIME = ("%02u-%02u-%04u %02u:%02u:%02u"):format(sysdate.day, sysdate.month, sysdate.year, sysdate.hour, sysdate.min, sysdate.sec)
	local SYSDATE = string.sub(SYSDATETIME, 1, 10)
	local SYSTIME = string.sub(SYSDATETIME, 12, 19)
	-- Открываем файл в режиме записи
	local PHPFileWrite = io.open(PHPFILENAME, "w")
	-- Если файл существует
		if PHPFileWrite ~= nil then
			for i = 1, #phpbegin do
			PHPFileWrite: write(phpbegin[i]..'\n')
			end
		PHPFileWrite: flush() -- Cохраняем изменения в файле	
		SIGNALMESSAGE = '$body = "<p><strong>'..SYSDATE..' '..SYSTIME..' '..SIGNALMESSAGE..'</strong></p>";\n'		
		PHPFileWrite: write(SIGNALMESSAGE)
		PHPFileWrite: flush()
			for i = 1, #phpend do
			PHPFileWrite: write(phpend[i]..'\n')
			end		
		PHPFileWrite: flush()
		PHPFileWrite: close() -- Закрываем файл			
		end
	os.execute('start /min c:\\php\\php.exe '..PHPFILENAME)
end
Данная публикация является личным мнением автора. Мнение владельца сайта может не совпадать с мнением автора.
  • обсудить на форуме:
  • Quik Lua
622 | ★1

Читайте на SMART-LAB:
Фото
ДОМ.РФ может увеличить прибыль за девять месяцев на 39%: прогноз Т-Инвестиций
30 октября $DOMRF опубликует результаты по международным стандартам финансовой отчетности (МСФО) за третий квартал 2026 года. Главный...
Фото
Раскрытие отчетности за девять месяцев и эфир с топ-менеджментом: save the date 📅
Совсем скоро ноябрь, а значит, наступает время подвести итоги работы Positive Technologies за третий квартал и девять месяцев. Конечно, самый...
Фото
💡 Если ставка не спешит вниз
Ключевая ставка остаётся на уровне 14% с июля. По прогнозу аналитиков ВТБ Мои Инвестиции, к концу 2027 года она может снизиться до 12,25%....
Фото
Банковский сектор сентябрь 2026 г. - рекордная прибыль, но рост все менее равномерный
Банки отчитались за сентябрь. Что интересного мы узнали?  За 12 месяцев прибыль сектора составляет уже 4,5 трлн руб. при прогнозе ЦБ 3,9–4,4...

теги блога BITE4SAVE

....все тэги



UPDONW
Новый дизайн