Автор Тема: Pop3 и Web Mail  (Прочетена 19489 пъти)

alabal

  • Напреднали
  • *****
  • Публикации: 2173
  • cat /earth/europe/bg/sofia | grep Nacamura
    • Профил
Pop3 и Web Mail
« Отговор #15 -: Feb 25, 2005, 17:21 »
Айде да не говорим за обяди и ограничени ресурси (scarce resources), а също и за крайния икономически либерализъм, че се изприщвам. Понякога ме наляга срам за това, че някои старши мои колеги са измислили подобни глупости, като фразата за безплатните обяди.
Google могат, mail.bg не могат. Живи и здрави! На мен нищо не ми казаха за тази политика.
Активен

It makes you awful glad that you were born a man.

DoctorA

  • Напреднали
  • *****
  • Публикации: 106
    • Профил
Pop3 и Web Mail
« Отговор #16 -: Mar 02, 2005, 19:46 »
Цитат
Има и едно предизвикателство - да се напише модул за freepops който да отваря abv.bg - нобходим е специален модул за целта и мисля че няма да отнеме много време на някой experienced.

не е толкова сложно че да търсим някой experienced ':p'
Примерен код

doctora@DoctorA:/usr/share/freepops/lua$ cat abv.lua
-- ************************************************************************** --
-- FreePOPs @abv.bg webmail interface
--
-- Released under the GNU/GPL license
-- Written by Georgi Saev <georgi_saev@abv.bg>
-- ************************************************************************** --

-- Globals
--
PLUGIN_VERSION = "0.1b"
PLUGIN_NAME = "abv.bg"
PLUGIN_LICENSE = "GNU/GPL"
PLUGIN_DOMAINS = {"@abv.bg","@gyuvetch.bg","@gbg.bg"}
-- -------------------------------------------------------------------------- --
foo_globals= {

  username="nothing",
  hostname="nothing",
  password="nothing",
  session_id="nothing",
  browser="nothing",
  stat_done=false
}
-- -------------------------------------------------------------------------- --
function init(pstate)
        freepops.export(pop3server)
        log.dbg("FreePOPs plugin '"..
        PLUGIN_NAME.."' version '"..PLUGIN_VERSION.."' started!\n")

   -- the serialization module
if freepops.dofile("serialize.lua") == nil then
      return POPSERVER_ERR_UNKNOWN
end
   -- the browser module
if freepops.dofile("browser.lua") == nil then
      return POPSERVER_ERR_UNKNOWN
end
   -- the common module
if freepops.dofile("common.lua") == nil then
       return POPSERVER_ERR_UNKNOWN
end
     -- checks on globals
freepops.set_sanity_checks()
return POPSERVER_ERR_OK
end
                                        --

-- -------------------------------------------------------------------------- --
-- Must save the mailbox name

function user(pstate,username1)
   local at = string.find(username1, "@")
   local username = string.sub(username1,0,at-1)
   local hostname = string.sub(username1,at+1)
   foo_globals.username = username
   foo_globals.hostname = hostname
   print("*** the user wants to login as "..foo_globals.username.."@"..foo_globals.hostname.."'")
  return POPSERVER_ERR_OK
end
-- -------------------------------------------------------------------------- --
-- Must login

function pass(pstate,password)
        foo_globals.password = password
       -- create a new browser
       local b = browser.new()
       -- store the browser object in globals
       foo_globals.browser = b
       -- create the data to post
       local post_data = string.format("username=%s&password=%s&hostname=%s",foo_globals.username,foo_globals.password,foo_globals.hostname)
       -- the uri to post to
       local post_uri = "http://mail08.abv.bg/app/servlet/bg.abv.mail.Login"
       -- post it
       local file,err = nil, nil
       file,err = b:post_uri(post_uri,post_data)
        -- search the session ID
        local _,_,id = string.find(file,"jsessionid=(%w+)")
        if id == nil then
              print("*** exiting")
               return POPSERVER_ERR_AUTH
        end
        foo_globals.session_id = id
        print("*** the user has logged in as "..foo_globals.username.."@"..foo_globals.hostname.."")

        return POPSERVER_ERR_OK
end

-- -------------------------------------------------------------------------- --
-- Fill the number of messages and their size

function stat(pstate)
      if foo_globals.stat_done == true then return POPSERVER_ERR_OK end
      local file,err = nil, nil
      local b = foo_globals.browser
      local session_id = foo_globals.session_id
      file,err = b:get_uri("http://mail08.abv.bg/app/j/box.jsp;jsessionid="..session_id.."?fid=10")
      local e = ".*<tr>.*<td>.*<input>.*</td>.*<td>.*<img>.*</td>.*<td>[.*]{img}.*</td>.*<td>[.*]{img}.*</td>.*<td>[.*]{img}.*</td>.*<td>.*<a>.*</a>.*</td>.*<td>[.*]{a}[.*]{/a}.*</td>.*<td>.*</td>.*<td>.*</td>.*</tr>"
      local g = "O<O>O<O>O<X>O<O>O<O>O<O>O<O>O<O>[O]{O}O<O>O<O>[O]{O}O<O>O<O>[O]{O}O<O>O<O>O<O>O<O>O<O>O<O>[O]{O}[O]{O}O<O>O<O>O<O>O<O>X<O>O<O>"
      local x = mlex.match(file,e,g)
      --debug print
      x:print()
      set_popstate_nummesg(pstate,x:count())
      for i=1,x:count() do
              local _,_,size = string.find(x:get(1,i-1),"(%d+)")
              local _,_,size_mult_k = string.find(x:get(1,i-1),"([Kk][Bb])")                        local _,_,size_mult_m = string.find(x:get(1,i-1),"([Mm][Bb])")
              local _,_,uidl = string.find(x:get(0,i-1),"value=\"(%d+)\"")
              if size_mult_k ~= nil then
                     size = size * 1024
              end
              if size_mult_m ~= nil then
                     size = size * 1024 * 1024
              end
              set_mailmessage_size(pstate,i,size)
              set_mailmessage_uidl(pstate,i,uidl)
      end
      foo_globals.stat_done = true
      return POPSERVER_ERR_OK
end
-- -------------------------------------------------------------------------- --
-- Fill msg uidl field
function uidl(pstate,msg) return common.uidl(pstate,msg) end
-- -------------------------------------------------------------------------- --
-- Fill all messages uidl field
function uidl_all(pstate) return common.uidl_all(pstate) end
-- -------------------------------------------------------------------------- --
-- Fill msg size
function list(pstate,msg) return common.list(pstate,msg) end
-- -------------------------------------------------------------------------- --
-- Fill all messages size
function list_all(pstate) return common.list_all(pstate) end
-- -------------------------------------------------------------------------- --
-- Unflag each message marked for deletion
function rset(pstate) return common.rset(pstate) end
-- -------------------------------------------------------------------------- --
-- Mark msg for deletion
function dele(pstate,msg) return common.dele(pstate,msg) end
-- -------------------------------------------------------------------------- --
-- Do nothing
function noop(pstate) return common.noop(pstate) end
--------------------------------------------------------------------------------

-- The callback factory for retr
--
function retr_cb(data)
        local a = stringhack.new()
        return function(s,len)
                s = a:dothack(s).."\0"
                popserver_callback(s,data)
                return len,nil
        end
end
-- -------------------------------------------------------------------------- --
-- Get message msg, must call
-- popserver_callback to send the data
function retr(pstate,msg,pdata)
        local data=pdata
        -- we need the stat
        local st = stat(pstate)
        if st ~= POPSERVER_ERR_OK then return st end
        -- the callback
        local cb = retr_cb(data)
        -- some local stuff
       local session_id = foo_globals.session_id
       local b = foo_globals.browser
       local uri ="http://mail08.abv.bg/app/servlet/bg.abv.mail.GetData;jsessionid="..session_id.."?fid=10&mid="..get_mailmessage_uidl(pstate,msg).."&nid=0&eid=-1&charset=Cp1251&ac=d"
        -- tell the browser to pipe the uri using cb
        local f,rc = b:pipe_uri(uri,cb)
        if not f then
                log.error_print("Asking for "..uri.."\n")
                log.error_print(rc.."\n")
                return POPSERVER_ERR_NETWORK
        end
return POPSERVER_ERR_OK
end

-- -------------------------------------------------------------------------- --
-- Must quit without updating

function quit(pstate)
        return POPSERVER_ERR_OK
end

само функцията за изтриване не съм я писал,щото ме мързи
П.С.: има и един бъг - понякога при stat връща
+OK 0 0
Активен

Meesa find yousa's lackin' in faith disturbin'

alabal

  • Напреднали
  • *****
  • Публикации: 2173
  • cat /earth/europe/bg/sofia | grep Nacamura
    • Профил
Pop3 и Web Mail
« Отговор #17 -: Mar 03, 2005, 11:28 »
Братко!!!!!!
Когато прочетох събщението ти заподскачах от радост, но кратка бе тя!
Ето какво съм направил и какви грешки ми дава:
ОС - Дебиан, freepops - инсталиран от unofficial repository - обявено на страницата на freepops, mail client - Thunderbird
Добавен ред в /etc/freepops/config.lua и в /usr/share/freepops/lua/config.lua:

Цитат
-- abv.bg
freepops.MODULES_MAP["abv.bg"]   = {name="abv.lua"}


Записах твоя файл, като abv.lua в директорията /usr/share/freepops/lua/

Thunderbird е настроен така:
Server name: localhost
Port 2000
User name: drundrun@abv.bg

Ето и грешките които получавам:

Цитат
# freepopsd -w
freepops started with loglevel 2 on a little endian machine.
Maintaining pid file "/var/run/freepopsd.pid"
DBG(popserver.c, 166): [6680] ?? Ip address 0.0.0.0 real port 2000

DBG(popserver.c, 166): [6680] ?? Ip address 127.0.0.1 real port 2000

DBG(popserver.c, 166): [6680] -> +OK FreePOPs/0.0.25 pop3 server ready

DBG(popserver.c, 166): [6680] <- AUTH

DBG(popserver.c, 166): [6680] -> -ERR ONLY PASS IS SUPPORTED

ONLY PASS IS SUPPORTED
DBG(popserver.c, 166): [6680] <- CAPA

DBG(popserver.c, 166): [6680] -> +OK ANSWER FOLLOW

DBG(popserver.c, 166): [6680] -> TOP
USER
UIDL

DBG(popserver.c, 166): [6680] -> .

DBG(popserver.c, 166): [6680] <- USER drundrun@abv.bg


LUAY: lua error message:
LUAY:    /usr/share/freepops/lua/abv.lua:1: `=' expected near `@'

LUAY: lua stack traceback:
LUAY:    [C]: __dofile: -1 (C field)
LUAY:    /usr/share/freepops/lua/freepops.lua: (null): 200 (Lua )
LUAY:    [C]: foreach: -1 (C field)
LUAY:    /usr/share/freepops/lua/freepops.lua: dofile: 211 (Lua field)
LUAY:    /usr/share/freepops/lua/freepops.lua: load_module_for: 349 (Lua field)
LUAY:    /usr/share/freepops/lua/freepops.lua: (null): 536 (Lua )


LUAY: lua error message:
LUAY:    attempt to call a nil value

LUAY: lua stack traceback:


LUAY: lua error message:
LUAY:    attempt to call a nil value

LUAY: lua stack traceback:

DBG(popserver.c, 166): [6680] -> +OK PLEASE ENTER PASSWORD

DBG(popserver.c, 161): [6680] <- PASS *********

LUAY: lua error message:
LUAY:    attempt to call a nil value

LUAY: lua stack traceback:

DBG(popserver.c, 166): [6680] -> -ERR UNKNOWN ERROR, PLEASE FIX

UNKNOWN ERROR, PLEASE FIX

LUAY: lua error message:
LUAY:    attempt to call a nil value

LUAY: lua stack traceback:

DBG(threads.c,  81): thread 0 will die


след като се опитам да проверя пощата си.
Нямам дори и идея защо не иска да приеме паролата ми, която е проверено вярна - получава се същата грешка и при още два акаунта в abv.
Та къде може да е грешката - нека да открием, за да се върне радостта!
Активен

It makes you awful glad that you were born a man.

alabal

  • Напреднали
  • *****
  • Публикации: 2173
  • cat /earth/europe/bg/sofia | grep Nacamura
    • Профил
Pop3 и Web Mail
« Отговор #18 -: Mar 03, 2005, 11:52 »
И тъй!
Попрегледах малко и се оказа че проблемите вероятно идват от този ред:
Цитат
doctora@DoctorA:/usr/share/freepops/lua$ cat abv.lua


Дори и след като промених  doctora@DoctorA с името на моя потребител и хост продължава да дава тази грешка:

Цитат
LUAY: lua error message:
LUAY:    /usr/share/freepops/lua/abv.lua:1: `=' expected near `@'


Нямам идея къде го очаква това '=' .
Активен

It makes you awful glad that you were born a man.

Regia

  • Напреднали
  • *****
  • Публикации: 293
  • Distribution: Tilix
  • Window Manager: KDE
    • Профил
    • WWW
Pop3 и Web Mail
« Отговор #19 -: Mar 03, 2005, 12:07 »
doctora@DoctorA:/usr/share/freepops/lua$ cat abv.lua

Махни го това.
Това е командата за показване на файла, не част от скрипта.
Активен

alabal

  • Напреднали
  • *****
  • Публикации: 2173
  • cat /earth/europe/bg/sofia | grep Nacamura
    • Профил
Pop3 и Web Mail
« Отговор #20 -: Mar 03, 2005, 12:38 »
Леле колко съм разсеян!!!!
Благодарско - това върна радостта!!!!
Активен

It makes you awful glad that you were born a man.

alabal

  • Напреднали
  • *****
  • Публикации: 2173
  • cat /earth/europe/bg/sofia | grep Nacamura
    • Профил
Pop3 и Web Mail
« Отговор #21 -: Mar 03, 2005, 14:14 »
Мдаааа!
Плъгина работи идеално само има един единствен проблем. При всяка втора проверка тегли писмата отново и отново. Този проблем май се оказва леко досаден,  тъй като имам над 50 писма в едната кутия, които не бих искал да изтрия. Вероятно би трябвало да има някакъв лесен начин по който да се укаже на freepops, че писмата вече са теглени.

Btw, изпробвах го и с виндовс - и там работи перфектно - трябва само да се копира abv.lua в c:\Program Files\FreePOPs\LUA и да се добави

-- abv
freepops.MODULES_MAP["abv.bg"]   = {name="abv.lua"}

в c:\Program Files\FreePOPs\config.lua

Хиляди благодарности за плъгина на DoctorA.  Много съм щастлив - наистина.

P.S.: Надяваме се, че скоро ще се пребори скоро с мързела, и ще напише няколко реда програмен код.
Активен

It makes you awful glad that you were born a man.

DoctorA

  • Напреднали
  • *****
  • Публикации: 106
    • Профил
Pop3 и Web Mail
« Отговор #22 -: Mar 03, 2005, 17:55 »
Цитат
При всяка втора проверка тегли писмата отново и отново.

това би трябвало да може да се настрои от mail клиента , защото тои пише
retr msg_n към сървъра ( аз ползвам telnet засега и съм много доволен ':p' )
колкото до мързела вече почти 17 години се боря с него и още не съм се преборил
П.С.: явно има и по разсеяни от мене ':p'
Активен

Meesa find yousa's lackin' in faith disturbin'

spawnman

  • Напреднали
  • *****
  • Публикации: 455
    • Профил
Pop3 и Web Mail
« Отговор #23 -: Mar 03, 2005, 18:21 »
Привет на всички!
Идеята да си проверявам web пощите с помощта на благинка от сорта на FreePOPs винаги ми е допадала, особено сега, когато се появява възможност да правя това дори и с кутията си в abv.bg. Без да губя излишно време сложих freepops-0.0.23-1 на Мандрейк 10.0 и създадох /usr/share/freepops/lua/abv.lua по образ и подобие на прототипа, даден от DoctorA. После в /etc/freepops/config.lua добавих реда:
Примерен код
freepops.MODULES_MAP["abv.bg"]          = {name="abv.lua"}
Последва бърза настройка на account-ите на наличните mail клиенти в системата да ползват за POP3 localhost:2000, username: imeto_mi_v_abv@abv.bg После "драснах" един service freepops start и всичко беше ОК. Обаче неще и неще да ме пусне под предлог, че ми била грешна паролата. Знам си аз паролата, настройките на mail клиентите са ми бетон, та почнах отчаяно да проверявам за следи из логовете и ето на какво се натъкнах:
Цитат
Thu Mar  3 17:59:52 2005 freepopsd: LUA_LOG->   BUG found in '@/usr/share/freepops/lua/abv.lua' at line 61.                              
        Function 'pass' sets an undefined global 'localb'                                                                                
                                                                                                                                          
        This is a sanity check added by freepops.set_sanity_checks() that                                                                
        prevents the plugin to create new global variables. This means you                                                                
        must use the 'local' keyword or declare a global table                                                                            
        (ex. plugin_state) and use it as the global state of the plugin.                                                                  
        This avoids some hard-to-detect bugs.

Ако някой може да помогне ще съм супер доволен, както съм супер доволен от работата на FreePOPs-а с пощата ми в yahoo.com '<img'>
Активен

Mandriva Cooker
BlackBox

FV80503200 SL27J, 82437FX TSC, 128 (4x32) MB 72pin EDO, AHA-2940UW, ST34572W, M2513A, CDU521, CTL0024, 3C509b-TPC, 215R3PUA22, FP767-12

DoctorA

  • Напреднали
  • *****
  • Публикации: 106
    • Профил
Pop3 и Web Mail
« Отговор #24 -: Mar 03, 2005, 20:06 »
намери го това 'localb' и го промени на 'local b' ( без кавичките нали знаеш )
btw преписвал ли си го или си му дал copy/paste ? ( много ми е интересно как се е получило да пише  'localb' )
Активен

Meesa find yousa's lackin' in faith disturbin'

alabal

  • Напреднали
  • *****
  • Публикации: 2173
  • cat /earth/europe/bg/sofia | grep Nacamura
    • Профил
Pop3 и Web Mail
« Отговор #25 -: Mar 03, 2005, 20:32 »
Нямам идея защо, но Тъндърбърд (или freepops) променя файла popstate за abv.bg на две проверки на пощата.
Ето и какви са различните състояния (последователни) на файла:

Цитат

# POP3 State File
# This is a generated file!  Do not edit.

*localhost drundrun@abv.bg
k 442149667 1109872102
k 441600470 1109872103
k 441600594 1109872103
k 437818216 1109872105
k 437827076 1109872105
k 438297117 1109872104
k 442845848 1109872101
k 441882465 1109872103
k 437797914 1109872105
k 439720153 1109872103

# POP3 State File
# This is a generated file!  Do not edit.

*localhost drundrun@abv.bg
k 441600470 1109872695
k 442149667 1109872694
k 437818216 1109872696
k 441600594 1109872695
k 437827076 1109872696
k 438297117 1109872695
k 442845848 1109872693
k 437797914 1109872696
k 441882465 1109872695
k 439720153 1109872695


След което разбира се freepops решава, че всички десет съобщения са нови и ги тегли.
Активен

It makes you awful glad that you were born a man.

spawnman

  • Напреднали
  • *****
  • Публикации: 455
    • Профил
Pop3 и Web Mail
« Отговор #26 -: Mar 03, 2005, 20:45 »
За DoctorA:
Не съм си играл да го преписвам на ръка, а направих copy & paste... Извинявам се за глупавия въпрос, но изядения интервал ми стана очевиден едва след като видях поста ти '<img'> Благодаря ти за усилието! И аз се присъединявам към надеждата на alabal за довършване на abv.lua '<img'>
Активен

Mandriva Cooker
BlackBox

FV80503200 SL27J, 82437FX TSC, 128 (4x32) MB 72pin EDO, AHA-2940UW, ST34572W, M2513A, CDU521, CTL0024, 3C509b-TPC, 215R3PUA22, FP767-12

DoctorA

  • Напреднали
  • *****
  • Публикации: 106
    • Профил
Pop3 и Web Mail
« Отговор #27 -: Mar 03, 2005, 21:37 »
alabal, къде е тоя файл ? и на коя програма е ( ако не е очевадно от пътя до него )
П.С.: повторното теглене може да се дължи и на бъга с stat
Активен

Meesa find yousa's lackin' in faith disturbin'

alabal

  • Напреднали
  • *****
  • Публикации: 2173
  • cat /earth/europe/bg/sofia | grep Nacamura
    • Профил
Pop3 и Web Mail
« Отговор #28 -: Mar 03, 2005, 21:37 »
Всъщност се оказа, че не е виновен плъгина, който променя popstate.dat , а това, че в действителност freepops не логва в abv, а отчита, че го е направило и изтрива съдържанието на popstate.dat и тегли отново съдържанието на inbox, следващия път когато действително се свърже с abv.bg.

Тази грешка се появява не само когато проверките на пощата следват една след друга бързо, но и когато е оставено автоматично да си проверява - нямам идея защо е така, но определено проблема съществува при мен и под Дебиан и под виндовс. Вероятно е нещо свързано с грешни сесии или някакви особености на abv.bg и правата за достъп. Вероятно може да се използва някаква форма на проверка за това дали е логнало успешно в inbox и ако не - да не пипа popstate.

При мен тоя файл се появява във всяка директория на Tunderbird - за всеки акаунт е отделен, във директориите на Mail:


Цитат
ls -l /home/blue/.mozilla-thunderbird/h3hyaa9s.default/Mail
total 5
drwxr-xr-x  6 blue blue 464 Feb 22 13':0'5 Local Folders
drwxr-xr-x  7 blue blue 536 Feb 22 13:23 localhost
drwxr-xr-x  7 blue blue 576 Feb 22 13:51 localhost-1
drwxr-xr-x  7 blue blue 576 Feb 22 14':0'0 localhost-2
drwxr-xr-x  7 blue blue 576 Feb 22 14:20 localhost-3
drwxr-xr-x  7 blue blue 576 Mar  3 21:18 localhost-4
drwxr-xr-x  7 blue blue 576 Mar  3 21:25 localhost-5
drwxr-xr-x  7 blue blue 576 Feb 22 14:28 pop.gmail-1.com
drwxr-xr-x  7 blue blue 576 Feb 22 14:46 pop.gmail.com
drwxr-xr-x  7 blue blue 576 Feb 22 13:23 pop3.mail.bg


Във всяка директория има по един popstate.dat файл, който описва колко са писмата и статуса им. Сега ще пробвам и с Evolution дали ще има същия проблем.
Активен

It makes you awful glad that you were born a man.

DoctorA

  • Напреднали
  • *****
  • Публикации: 106
    • Профил
Pop3 и Web Mail
« Отговор #29 -: Mar 03, 2005, 21:42 »
ще пробвам да я вградя в stat() тая проверка пък ше видим '<img'>
преди да го пусна тука имаше един принт за дебъгване в стат и понякога абв казваше че е изтекла сесията
Активен

Meesa find yousa's lackin' in faith disturbin'

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
POP3 problemi
Настройка на програми
pepino 1 1480 Последна публикация Jul 30, 2004, 18:41
от Agent_SMITH
problem s POP3
Настройка на програми
pepino 2 1115 Последна публикация Aug 11, 2004, 13:09
от vladou
Windows Mail => Linux Mail
Настройка на програми
Shadowfox 2 5706 Последна публикация Feb 08, 2005, 08:58
от
Pop3 проблем
Хардуерни и софтуерни проблеми
west 2 2373 Последна публикация Mar 19, 2006, 19:19
от west
Pop3 поща
Настройка на програми
colomager 8 3800 Последна публикация Apr 09, 2006, 16:47
от Ivv