Можно ли через QUIK с помощью LUA прочитать список email писем (mail.ru)? Есть ли образец скрипта как это можно сделать?
Торговый привод на Lua:
Пользователь
Сообщений: Регистрация: 27.01.2017
27.09.2021 09:31:42
Есть типовой пример.
Код
local version = getInfoParam("VERSION")
local bits = version:sub(1, 2) == '7.' and 'x86' or 'x64'
local gSPath = getScriptPath()
local libs_Path = getScriptPath()..'\\clibs_'..bits
package.cpath = libs_Path.."\\?.dll;"..libs_Path.."\\?\\?.dll;"..package.cpath
package.path = gSPath .."\\?.lua;"..gSPath .."\\?\\?.lua;"..gSPath .."\\?\\init.lua;"..package.path
local imap4 = require 'imap4'
local ssl = require("ssl")
local imapServer = 'imap.yandex.com'
local serverPort = 993
local login = 'login'
local password = 'pass'
-- If in doubt, see RFC 3501:
-- https://tools.ietf.org/html/rfc3501#section-6
-- Create new imap4 connection.
-- Port is optional and defaults to 143.
local connection = imap4(imapServer, serverPort, {protocol = 'tlsv1'})
-- If you are connecting to gmail, yahoo or any other server that needs a SSL
-- connection before accepting commands, uncomment this line:
--
-- connection:enabletls{protocol = 'sslv3'}
--
-- You can skip this step by creating the connection using
--
-- local connection = imap4('imap.gmail.com', 993, {protocol = 'sslv3'})
-- Print the servers capabilities.
print(table.concat(connection:capability(), ', '))
-- Make sure we can do what we came for.
assert(connection:isCapable('IMAP4rev1'))
-- Login. Warning: The credentials are sent in plaintext unless you
-- tunnel the connection over ssh, or use SSL (either via the method shown
-- above or calling connection:starttls(params) before logging in).
connection:login(login, password)
-- connection:lsub() lists all subscribed mailboxes.
for mb, info in pairs(connection:lsub()) do
-- connection:status(mailbox, items) queries status of a mailbox.
-- Note: The mailbox name may contain unescaped whitespace. You are
-- responsible to escape it properly - try ("%q"):format(mb).
local stat = connection:status(mb, {'MESSAGES', 'RECENT', 'UNSEEN'})
print(mb, stat.MESSAGES, stat.RECENT, stat.UNSEEN)
end
-- Sel ect INBOX with read only permissions.
local info = connection:examine('INBOX')
print(info.exist, info.recent)
-- List info on the 4 most recent mails.
-- See https://tools.ietf.org/html/rfc3501#section-6.4.5
for _,v in pairs(connection:fetch('(UID BODY.PEEK[HEADER.FIELDS (From Date Subject)])', (info.exist)..':*')) do
-- `v' contains the response as mixed (possibly nested) table.
-- Keys are stored in the list part. In this example:
--
-- v[1] = "UID", v[2] = BODY
--
-- `v[key]' holds the value of that part, e.g.
--
-- v.UID = 10
--
-- `v.BODY' is the only exception and returns a table of the format
--
-- {parts = part-table, value = response}
--
-- For example:
--
-- v.BODY = {
-- parts = {"HEADER.FIELDS", {"From", "Date", "Subject"}},
-- value = "Fr om: Foo <foo@bar.baz>\r\nDate:..."
-- }
print(v.id, v.UID, v.BODY.value)
local txt = connection:fetch('(BODY.PEEK[TEXT])', v.id)
if #txt > 0 then
print(txt[1].BODY.value)
end
end
-- close connection
connection:logout()
local version = getInfoParam ( "VERSION" )
local bits = version:sub( 1 , 2 ) = = '7.' and 'x86' or 'x64'
local gSPath = getScriptPath ()
local libs_Path = getScriptPath () .. '\\clibs_' .. bits
package.cpath = libs_Path .. "\\?.dll;" .. libs_Path .. "\\?\\?.dll;" .. package.cpath
package.path = gSPath .. "\\?.lua;" .. gSPath .. "\\?\\?.lua;" .. gSPath .. "\\?\\init.lua;" .. package.path
local imap4 = require 'imap4'
local ssl = require ( "ssl" )
local imapServer = 'imap.yandex.com'
local serverPort = 993
local login = 'login'
local password = 'pass'
-- If in doubt, see RFC 3501:
-- https://tools.ietf.org/html/rfc3501#section-6
-- Create new imap4 connection.
-- Port is optional and defaults to 143.
local connection = imap4(imapServer, serverPort, {protocol = 'tlsv1' })
-- If you are connecting to gmail, yahoo or any other server that needs a SSL
-- connection before accepting commands, uncomment this line:
--
-- connection:enabletls{protocol = 'sslv3'}
--
-- You can skip this step by creating the connection using
--
-- local connection = imap4('imap.gmail.com', 993, {protocol = 'sslv3'})
-- Print the servers capabilities.
print ( table.concat (connection:capability(), ', ' ))
-- Make sure we can do what we came for.
assert(connection:isCapable( 'IMAP4rev1' ))
-- Login. Warning: The credentials are sent in plaintext unless you
-- tunnel the connection over ssh, or use SSL (either via the method shown
-- above or calling connection:starttls(params) before logging in).
connection:login(login, password)
-- connection:lsub() lists all subscribed mailboxes.
for mb, info in pairs(connection:lsub()) do
-- connection:status(mailbox, items) queries status of a mailbox.
-- Note: The mailbox name may contain unescaped whitespace. You are
-- responsible to escape it properly - try ("%q"):format(mb).
local stat = connection:status(mb, {'MESSAGES', 'RECENT' , 'UNSEEN' })
print (mb, stat.MESSAGES, stat.RECENT, stat.UNSEEN)
end
-- Sel ect INBOX with read only permissions.
local info = connection:examine( 'INBOX' )
print (info.exist, info.recent)
-- List info on the 4 most recent mails.
-- See https://tools.ietf.org/html/rfc3501#section-6.4.5
for _,v in pairs(connection:fetch( '(UID BODY.PEEK[HEADER.FIELDS (From Date Subject)])' , (info.exist) .. ': * ')) do
-- `v' contains the response as mixed (possibly nested) table.
-- Keys are stored in the list part. In this example:
--
-- v[1] = "UID", v[2] = BODY
--
-- `v[key]' holds the value of that part, e.g.
--
-- v.UID = 10
--
-- `v.BODY' is the only exception and returns a table of the format
--
-- {parts = part-table, value = response}
--
-- For example:
--
-- v.BODY = {
-- parts = {"HEADER.FIELDS", {"From", "Date", "Subject"}},
-- value = "Fr om: Foo <foo@bar.baz>\r\nDate:..."
-- }
print (v.id, v.UID, v.BODY.value)
local txt = connection:fetch( '(BODY.PEEK[TEXT])' , v.id)
if # txt > 0 then
print (txt[ 1 ].BODY.value)
end
end
-- close connection
connection:logout()
Не пойму какие библиотеки нужно подключить? Нашел еще на
Торговый привод на Lua:
Пользователь
Сообщений: Регистрация: 08.05.2020
29.09.2021 21:35:58
Нашел более понятный пример, но не пойму где взять библиотеки для подключения?
Код
local imap4 = require "imap4"
local Message = require "pop3.message"
local connection = imap4('imap.qip.ru', 143)
assert(connection:isCapable('IMAP4rev1'))
connection:login('****', '****')
-- Sel ect INBOX with read only permissions.
local info = connection:examine('INBOX')
print(info.exist, info.recent)
-- List info on the 4 most recent mails.
for _,v in pairs(connection:fetch('(UID BODY.PEEK[HEADER.FIELDS (Subject To From Date)])', (info.exist-4)..':*')) do
print("-------------------------")
local msg = Message(v.BODY.value)
print("ID: ", msg:id())
print("subject: ", msg:subject())
print("to: ", msg:to())
print("from: ", msg:from())
print("fr om addr: ", msg:from_address())
print("reply: ", msg:reply_to())
print("reply addr: ", msg:reply_address())
print("trunc: ", msg:is_truncated())
for i,v in ipairs(msg:full_content()) do
if v.text then print(" ", i , "TEXT: ", v.type, #v.text)
else print(" ", i , "FILE: ", v.type, v.file_name or v.name, #v.data) end
end
end
-- close connection
connection:logout()
Торговый привод на Lua:
Пользователь
Сообщений: Регистрация: 27.01.2017
30.09.2021 09:22:06
Нужны библиотеки IMAP4, socket. Также, скорее всего, необходима ssl, т.к. найти почту без оного уже сложно.
Пользователь
Сообщений: Регистрация: 08.05.2020
30.09.2021 21:26:11
Понимаю что нужны библиотеки. Но где их скачать? Это должны быть dll-файлы?
Торговый привод на Lua:
Пользователь
Сообщений: Регистрация: 27.01.2017
01.10.2021 08:59:37
Да. socket найти под x64 lua 5.3 можно. А вот ssl - уже сложнее. Хотя, кажется, на форуме выкладывали собранные, рабочие варианты.
Пользователь
Сообщений: Регистрация: 08.05.2020
01.10.2021 21:53:11
Цитата
Nikolay написал: Да. socket найти под x64 lua 5.3 можно. А вот ssl - уже сложнее. Хотя, кажется, на форуме выкладывали собранные, рабочие варианты.
Не совсем понимаю - здесь требуется подключить следующие библиотеки? local imap4 = require "imap4" local Message = require "pop3.message"
Зачем сокет? Где найти эти imap4, pop3? Искать нужно dll файлы?
Торговый привод на Lua:
Пользователь
Сообщений: Регистрация: 08.05.2020
04.10.2021 21:17:30
Жалко - что никто не может подсказать...
Торговый привод на Lua:
Пользователь
Сообщений: Регистрация: 27.01.2017
05.10.2021 09:06:02
даже на этом форуме есть поиск.
socket - это библиотека для lua. Она включает в себя как lua файлы, так и dll. Она должна быть собрана под нужную версию lua.
imap4 - это тоже библиотека. Поиск любой системе выведет на репозитарий проекта.
socket - это библиотека для lua. Она включает в себя как lua файлы, так и dll. Она должна быть собрана под нужную версию lua.
imap4 - это тоже библиотека. Поиск любой системе выведет на репозитарий проекта.
Если есть знатоки и у кого-то есть возможность (готов за вознаграждение) - помогите пожалуйста реализовать чтение почты на lua в Quik 8-версии. Нужны исходники Lua-скрипта, который читает почтовый ящик mail.ru и файлы библиотек, которые нужно закинуть в папку quik. У меня не получило найти библиотки и запустить чтение почты.
Торговый привод на Lua:
Пользователь
Сообщений: Регистрация: 27.01.2017
23.11.2021 09:55:44
Если не использовать SSL, то достаточно socket - найдете здесь imap -
Если же использовать SSL, то необходимо иметь luasec. Я стабильно работающую с 5.4 и 5.3 не нашел.
Поэтому, чтобы не зависеть от библиотек lua, уже давно написал себе консольную программку, читающую почту и записывающую в файлы, которые уже скрипт читает и обрабатывает.
Пользователь
Сообщений: Регистрация: 08.05.2020
30.11.2021 18:10:32
Цитата
Nikolay написал: Если не использовать SSL, то достаточно socket - найдете здесь imap -
Если же использовать SSL, то необходимо иметь luasec. Я стабильно работающую с 5.4 и 5.3 не нашел.
Поэтому, чтобы не зависеть от библиотек lua, уже давно написал себе консольную программку, читающую почту и записывающую в файлы, которые уже скрипт читает и обрабатывает.
1) Очень интересная идея с консольной командой. Можно пример исходник (так понимаю это можно написать через блокнот). Вы ее потом как запускаете - через Quik? 2) Не совсем пойму по вашим ссылкам нужно использовать socket + imap или как? 3) Чем лучше SSL и можно ли без него?
Торговый привод на Lua:
Пользователь
Сообщений: Регистрация: 27.01.2017
30.11.2021 18:19:32
Речь не про консольную команду, а про консольную программу - читай сервис постоянно работающий и читающий почту.
В примере, что был приведен, видны зависимости:
Код
local imap4 = require 'imap4'
local ssl = require("ssl")
т.е. необходимо иметь библиотеку imap4, ссылка на которую была приведена. Также, если используется ssl, то необходима ssl.
Если посмотреть на код библиотеки imap, то видно, что для ее работы необходима socket
Код
local socket = require 'socket'
Поэтому необходимый минимум - это библиотеки imap и socket, что и было написано выше.
Пользователь
Сообщений: Регистрация: 08.05.2020
30.11.2021 18:21:44
Цитата
Nikolay написал: Речь не про консольную команду, а про консольную программу - читай сервис постоянно работающий и читающий почту.
В примере, что был приведен, видны зависимости:
Код
local imap4 = require 'imap4'
local ssl = require ( "ssl" )
т.е. необходимо иметь библиотеку imap4, ссылка на которую была приведена. Также, если используется ssl, то необходима ssl.
Если посмотреть на код библиотеки imap, то видно, что для ее работы необходима socket
Код
local socket = require 'socket'
Поэтому необходимый минимум - это библиотеки imap и socket, что и было написано выше.
Спасибо за развернутый ответ. Можно пример с вашей консольной программы.
Торговый привод на Lua:
Пользователь
Сообщений: Регистрация: 27.01.2017
30.11.2021 18:52:01
Цитата
Иван написал: Спасибо за развернутый ответ. Можно пример с вашей консольной программы.
Она написана на C#. Я её ещё не выкладывал в открытый доступ.
написал: Спасибо за развернутый ответ. Можно пример с вашей консольной программы.
Она написана на C#. Я её ещё не выкладывал в открытый доступ.
Но, все можно найти в примерах MailKit:
Уже и туда и сюда попробовал положить эти библиотеки. Но QUIK все равно их не находит... Не пойму что могу делать не правиьно?
Код
...\QUIK_2\LuaIndicators\Git\EnterTrade.lua:64: module 'socket' not found:
no field package.preload['socket']
no file '.\socket.lua'
no file 'C:\QUIK_2\lua\socket.lua'
no file 'C:\QUIK_2\lua\socket\init.lua'
no file 'C:\QUIK_2\socket.lua'
no file 'C:\QUIK_2\socket\init.lua'
no file 'C:\QUIK_2\Include\socket.lua'
no file 'C:\QUIK_2\Include\socket.luac'
no file 'C:\QUIK_2\LuaIndicators\socket.lua'
no file 'C:\QUIK_2\LuaIndicators\socket.luac'
no file 'C:\Program Files (x86)\Lua\5.1\lua\socket.lua'
no file 'C:\Program Files\Lua\5.1\lua\socket.lua'
no file '.\socket.dll'
no file 'C:\QUIK_2\socket.dll'
no file 'C:\QUIK_2\loadall.dll'
no file 'C:\QUIK_2\Include\socket.dll'
no file 'C:\QUIK_2\LuaIndicators\socket.dll'
Торговый привод на Lua:
Пользователь
Сообщений: Регистрация: 08.05.2020
01.12.2021 15:39:30
Сокет смог запустить прочитав этот пост 1) установил программу 2) закинул две папки mime & socket в LuaIndicators 3) подключил в скрипте