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 - это тоже библиотека. Поиск любой системе выведет на репозитарий проекта.
Страницы: 1
Читают тему (гостей: 1)
Наверх