Autore Topic: ricevere mail da programma in Gambas  (Letto 2862 volte)

Offline Taurus dei miracoli

  • Maestro Gambero
  • ****
  • Post: 334
  • In omnia pericula tasta testicula
    • Mostra profilo
ricevere mail da programma in Gambas
« il: 16 Gennaio 2011, 20:09:21 »
Ho già provato le splendide cose che si possono fare con gb.net.smtp e la possibilità che si ha di mandare mail.
Volevo chiedervi se si può ricevere mail con il protocollo POP3 o IMAP.
Qualcuno di voi sa come fare?

Grazie :-\
"penso spesso ad acquiloni,
a grandi imprese,
ad una thailandese...
...ma l'impresa eccezionale,
dammi retta,
è essere normale"
(L. Dalla)

Offline pastrank

  • Maestro Gambero
  • ****
  • Post: 266
    • Mostra profilo
Re: ricevere mail da programma in Gambas
« Risposta #1 il: 27 Gennaio 2011, 21:39:13 »
Volevo chiedervi se si può ricevere mail con il protocollo POP3 o IMAP.

Col gb.net  lo puoi fare, ma devi conoscere i protocolli (abbastanza semplici per pop3, imap e' un po' piu' complicato): io lo sto facendo (con mooolta calma, a dire il vero), con il protocollo nntp.

Offline Taurus dei miracoli

  • Maestro Gambero
  • ****
  • Post: 334
  • In omnia pericula tasta testicula
    • Mostra profilo
Re: ricevere mail da programma in Gambas
« Risposta #2 il: 28 Gennaio 2011, 10:24:38 »
Col gb.net  lo puoi fare, ma devi conoscere i protocolli (abbastanza semplici per pop3, imap e' un po' piu' complicato): io lo sto facendo (con mooolta calma, a dire il vero), con il protocollo nntp.

Premesso che il protocollo pop3 andrebbe benissimo per me.
Ho provato a dare un'occhiata ma non ne sono venuto a capo di nulla.  :hard:
Puoi darmi qualche suggerimento.  ???
"penso spesso ad acquiloni,
a grandi imprese,
ad una thailandese...
...ma l'impresa eccezionale,
dammi retta,
è essere normale"
(L. Dalla)

Offline pastrank

  • Maestro Gambero
  • ****
  • Post: 266
    • Mostra profilo
Re: ricevere mail da programma in Gambas
« Risposta #3 il: 28 Gennaio 2011, 22:09:10 »
Puoi darmi qualche suggerimento.  ???

Puoi fare in due modi: quello "difficile", usando solo Gambas (ma certo ti potrebbe riservire), e quello facile, usando un programma via shell (eleganza=0, imho, la shell mi piace usarla solo quando e' davvero necessario).

Quando ti connetti al server pop3, questo ti richiede un nome utente, facendoti apparire la stringa USER, e tu rispondi con il nome di login. Poi, ti chiedera' PASS, ed ecco la tua password da mandare. Cosi' loggato, gli spedisci un comando STAT o UIDL, con TOP puoi prendere le prime righe del messaggio per vedere se l'hai gia'. Ma e' meglio stia zitto, adesso vado a memoria (scrissi un client quasi 20 anni fa ormai), ti conviene leggere la rfc 1939.
Ma di sicuro, posso provare a suggerirti di usare gb.net. In nntp, ti parlo di questo perche' di fatto qui ho solo questo, per esempio la connessione puoi svilupparla cosi' (l'esempio e' grezzo e privo di controllo errori, e ho cercato di semplificare piu' possibile, togliendo anche cose importanti):

Codice: [Seleziona]
PUBLIC MySock AS Socket
PUBLIC Testo AS String
PUBLIC status AS String
PUBLIC MyDir AS String = User.home &/ "ggnews"
PUBLIC res AS Integer


PUBLIC SUB Connessione(servername AS String, porta AS Integer, utente AS String, password AS String)
 
     DIM sBuf AS String
     DIM Dati AS String
     DIM s AS String[]
     DIM Gruppo AS String

 
  MySock.Connect(servername, porta)

  DO WHILE (MySock.Status <> 7) AND (MySock.Status > 0)
    WAIT 0.1
  LOOP

  IF MySock.Status <> 7 THEN
    PRINT "Error"
    QUIT
  END IF

  DO WHILE Lof(MySock) = 0
    WAIT 0.1
  LOOP
  READ #MySock, sBuf, Lof(MySock)
  PRINT sbuf
  'autentificazione
  IF Left(sbuf, 4) = "200 " THEN
    sbuf = ""
    dati = "AUTHINFO USER " & utente & "\n"
    WRITE #MySock, DATI, Len(DATI)
      DO WHILE Lof(MySock) = 0
        WAIT 0.1
      LOOP
      READ #MySock, sBuf, Lof(MySock)
      PRINT sBuf
   
    IF Left(sbuf, 4) = "381 " THEN
    sbuf = ""
    dati = "AUTHINFO PASS " & password & "\n"
    WRITE #MySock, DATI, Len(DATI)
      DO WHILE Lof(MySock) = 0
        WAIT 0.1
      LOOP
      READ #MySock, sBuf, Lof(MySock)
      PRINT sBuf
     ENDIF
     'controllo
     IF Left(sbuf, 4) = "281 " THEN
        PRINT "Sei dentro"     
     ENDIF

Credo pero' che si capisca il senso: dopo la connessione, mandi un comando al server, e lui ti risponde con un qualcosa (i numeri tipo "281" sono i codici di risposta che uso qui per interpretare le risposte, ovviamente il server pop3 ha cose diverse: per esempio, quando ti connetti, ti risponde subito con qualcosa tipo "+OK POP3 server ready" (+OK" e' quello che interessa). Ecco, il lavoro lo puoi fare leggendo la RFC 1939, connettendoti e vedendo con un PRINT o che vuoi la risposta (io usavo printare perche' era un'applicazione a linea di comando), analizzi quello che ti risponde e prosegui inserendo il comando successivo: cosi' sembra complicatissimo, ma in realta' non lo e'. Se vuoi vedere "live" i comandi che dai e il loro effetto, puoi sempre connetterti da terminale e dare i comandi col telnet:

telnet pop3server.com 110

Scusa per come ti ho esposto la risposta, ma scrivere sui forum per me e' da panico...

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.705
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: ricevere mail da programma in Gambas
« Risposta #4 il: 02 Settembre 2016, 16:10:47 »
Puoi fare in due modi: quello "difficile", usando solo Gambas (ma certo ti potrebbe riservire), e quello facile, usando un programma via shell (eleganza=0, imho, la shell mi piace usarla solo quando e' davvero necessario).


...poi c'è quello più difficile  ;D : usare in Gambas le funzioni esterne della libreria Libcurl ed il protocollo POP3 .

http://www.gambas-it.org/wiki/index.php?title=Leggere_la_posta_elettronica_con_POP3_e_SSL_mediante_le_funzioni_esterne_del_API_di_Libcurl
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »