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()
Нашел более понятный пример, но не пойму где взять библиотеки для подключения?
Код
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()
socket - это библиотека для lua. Она включает в себя как lua файлы, так и dll. Она должна быть собрана под нужную версию lua.
imap4 - это тоже библиотека. Поиск любой системе выведет на репозитарий проекта.
Если есть знатоки и у кого-то есть возможность (готов за вознаграждение) - помогите пожалуйста реализовать чтение почты на lua в Quik 8-версии. Нужны исходники Lua-скрипта, который читает почтовый ящик mail.ru и файлы библиотек, которые нужно закинуть в папку quik. У меня не получило найти библиотки и запустить чтение почты.
Если же использовать SSL, то необходимо иметь luasec. Я стабильно работающую с 5.4 и 5.3 не нашел.
Поэтому, чтобы не зависеть от библиотек lua, уже давно написал себе консольную программку, читающую почту и записывающую в файлы, которые уже скрипт читает и обрабатывает.
Если же использовать SSL, то необходимо иметь luasec. Я стабильно работающую с 5.4 и 5.3 не нашел.
Поэтому, чтобы не зависеть от библиотек lua, уже давно написал себе консольную программку, читающую почту и записывающую в файлы, которые уже скрипт читает и обрабатывает.
1) Очень интересная идея с консольной командой. Можно пример исходник (так понимаю это можно написать через блокнот). Вы ее потом как запускаете - через Quik? 2) Не совсем пойму по вашим ссылкам нужно использовать socket + imap или как? 3) Чем лучше SSL и можно ли без него?
Уже и туда и сюда попробовал положить эти библиотеки. Но 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'
Сокет смог запустить прочитав этот пост https://smart-lab.ru/blog/401675.php 1) установил программу 2) закинул две папки mime & socket в LuaIndicators 3) подключил в скрипте