Quik - чтение почты

Страницы: 1
RSS
Quik - чтение почты
 
Можно ли через QUIK с помощью LUA прочитать список email писем (mail.ru)?
Есть ли образец скрипта как это можно сделать?
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
 
Есть типовой пример.
Код
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()
 
Цитата
Nikolay написал:
Есть типовой пример.
Код
   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()  
Не пойму какие библиотеки нужно подключить?
Нашел еще на https://github.com/dmj/misc/blob/master/lua/imap.lua/imap.lua
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
 
Нашел более понятный пример, но не пойму где взять библиотеки для подключения?
Код
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: https://github.com/iv-litovchenko/Quik-Enter-Trade
 
Нужны библиотеки IMAP4, socket. Также, скорее всего, необходима ssl, т.к. найти почту без оного уже сложно.
 
Понимаю что нужны библиотеки.
Но где их скачать?
Это должны быть dll-файлы?
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
 
Да. socket найти под x64 lua 5.3 можно. А вот ssl - уже сложнее. Хотя, кажется, на форуме выкладывали собранные, рабочие варианты.
 
Цитата
Nikolay написал:
Да. socket найти под x64 lua 5.3 можно. А вот ssl - уже сложнее. Хотя, кажется, на форуме выкладывали собранные, рабочие варианты.
Не совсем понимаю - здесь требуется подключить следующие библиотеки?
local imap4   = require "imap4"
local Message = require "pop3.message"

Зачем сокет?
Где найти эти imap4, pop3?
Искать нужно dll файлы?
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
 
Жалко - что никто не может подсказать...
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
 
даже на этом форуме есть поиск.

socket - это библиотека для lua. Она включает в себя как lua файлы, так и dll. Она должна быть собрана под нужную версию lua.

imap4 - это тоже библиотека. Поиск любой системе выведет на репозитарий проекта.
 
Цитата
Nikolay написал:
даже на этом форуме есть поиск.

socket - это библиотека для lua. Она включает в себя как lua файлы, так и dll. Она должна быть собрана под нужную версию lua.

imap4 - это тоже библиотека. Поиск любой системе выведет на репозитарий проекта.
Если есть знатоки и у кого-то есть возможность (готов за вознаграждение) - помогите пожалуйста реализовать чтение почты на lua в Quik 8-версии.
Нужны исходники Lua-скрипта, который читает почтовый ящик mail.ru и файлы библиотек, которые нужно закинуть в папку quik.
У меня не получило найти библиотки и запустить чтение почты.
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
 
Если не использовать SSL, то достаточно
socket - найдете здесь https://forum.quik.ru/forum10/topic6902/
imap - https://github.com/vrld/imap4.lua

Если же использовать SSL, то необходимо иметь luasec. Я стабильно работающую с 5.4 и 5.3 не нашел.

Поэтому, чтобы не зависеть от библиотек lua, уже давно написал себе консольную программку, читающую почту и записывающую в файлы, которые уже скрипт читает и обрабатывает.
 
Цитата
Nikolay написал:
Если не использовать SSL, то достаточно
socket - найдете здесь  https://forum.quik.ru/forum10/topic6902/
imap -  https://github.com/vrld/imap4.lua

Если же использовать SSL, то необходимо иметь luasec. Я стабильно работающую с 5.4 и 5.3 не нашел.

Поэтому, чтобы не зависеть от библиотек lua, уже давно написал себе консольную программку, читающую почту и записывающую в файлы, которые уже скрипт читает и обрабатывает.
1) Очень интересная идея с консольной командой. Можно пример исходник (так понимаю это можно написать через блокнот). Вы ее потом как запускаете - через Quik?
2) Не совсем пойму по вашим ссылкам нужно использовать socket + imap или как?
3) Чем лучше SSL и можно ли без него?
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
 
Речь не про консольную команду, а про консольную программу - читай сервис постоянно работающий и читающий почту.

В примере, что был приведен, видны зависимости:
Код
local imap4     = require 'imap4' 

local ssl       = require("ssl") 

т.е. необходимо иметь библиотеку imap4, ссылка на которую была приведена.
Также, если используется ssl, то необходима ssl.

Если посмотреть на код библиотеки imap, то видно, что для ее работы необходима socket

Код
local socket = require 'socket'

Поэтому необходимый минимум - это библиотеки imap и socket, что и было написано выше.
 
Цитата
Nikolay написал:
Речь не про консольную команду, а про консольную программу - читай сервис постоянно работающий и читающий почту.

В примере, что был приведен, видны зависимости:
Код
   local  imap4      =  require  'imap4'  

 local  ssl        =   require ( "ssl" )   

т.е. необходимо иметь библиотеку imap4, ссылка на которую была приведена.
Также, если используется ssl, то необходима ssl.

Если посмотреть на код библиотеки imap, то видно, что для ее работы необходима socket

Код
   local  socket  =  require  'socket'   

Поэтому необходимый минимум - это библиотеки imap и socket, что и было написано выше.
Спасибо за развернутый ответ.
Можно пример с вашей консольной программы.
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
 
Цитата
Иван написал:
Спасибо за развернутый ответ.
Можно пример с вашей консольной программы.
Она написана на C#. Я её ещё не выкладывал в открытый доступ.

Но, все можно найти в примерах MailKit: https://github.com/jstedfast/MailKit
 
Цитата
Nikolay написал:
Цитата
Иван написал:
Спасибо за развернутый ответ.
Можно пример с вашей консольной программы.
Она написана на C#. Я её ещё не выкладывал в открытый доступ.

Но, все можно найти в примерах MailKit:  https://github.com/jstedfast/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: https://github.com/iv-litovchenko/Quik-Enter-Trade
 
Сокет смог запустить прочитав этот пост https://smart-lab.ru/blog/401675.php
1) установил программу
2) закинул две папки mime & socket в LuaIndicators
3) подключил в скрипте

require("socket");
http = require("socket.http");

Выполнил запрос

-- QUIK Выполнить http - запрос
function _QuikGetHttp()
  content, status, header = socket.http.request(HTTP_URL);
  return content;
end;

Но все равно не пойму как дальше быть с почтой?
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
 
Как то у меня так ничего с почтой и не получилось.
Торговый привод на Lua: https://github.com/iv-litovchenko/Quik-Enter-Trade
Страницы: 1
Читают тему (гостей: 1)
Наверх