Gmail en pop3

 

dc Gmail est le fameux service de mails de Google.

On peut activer le support [pop3] pour consulter la messagerie. Néanmoins, le package [pop3] de la TclLib s'avère inutilisable : on apprend, en effet, sur cette page [1] qu'il faut une connexion [SSL].

En farfouillant sur le wiki anglophone, j'ai trouvé cette page [2] où Pat Thoyts explique comment activer une telle connexion.

Voilà donc un petit script simple (sans doute un peu naïf compte tenu de ma compréhension des sockets) :

 package require tls

 set idMail monadresse@gmail.com
 set passMail monmotdepasse

 proc Write {chan} {
    fileevent $chan writable {}
    tls::handshake $chan
    fconfigure $chan -buffering line -blocking 0 -translation crlf
    attenteReponse $chan
    identification $chan
    recupInfoMessages $chan
    aurevoir $chan
 }

 proc attenteReponse {chan {c {\+OK}}} {
    set l [gets $chan]
    while {![regexp $c $l]} {
	set l [gets $chan]
    }
    puts $l
    return $l
 }

 proc envoiCommande {chan com {c {\+OK}}} {
    puts $chan $com
    attenteReponse $chan $c
 }

 proc identification {chan} {
    envoiCommande $chan "USER $::idMail"
    envoiCommande $chan "PASS $::passMail"
 }

 proc aurevoir {chan} {
    envoiCommande $chan "QUIT"
    set ::forever 1
 }

 proc nbMessages {chan} {
    set l [envoiCommande $chan "STAT"]
    regexp {\+OK ([\d]+) [\d]+} $l -> nb
    return $nb
 }

 proc recupInfoMessages {chan} {
    set nb [nbMessages $chan]
    for {set i 1} {$i<=$nb} {incr i} {
	puts $chan "TOP $i 10"
	puts "Message $i"
	set l [gets $chan]
	while {![regexp {^\.$} $l]} {
	    if {[regexp {^From: (.*)$} $l -> from]} {
		puts "\tDe :\t $from"
	    } elseif {[regexp {^Subject: (.*)$} $l -> sujet]} {
		puts "\tSujet :\t $sujet"
	    }
	    set l [gets $chan]
	}
    }
 }

 set sock [tls::socket -async pop.gmail.com 995]
 fconfigure $sock -encoding binary -buffering none -blocking 1
 fileevent $sock writable [list Write $sock]
 vwait ::forever

qui permet d'avoir cela en sortie :

 +OK Gpop ready for requests from ***.***.***.*** 3pf3427156fge.0
 +OK send PASS
 +OK Welcome.
 +OK 8 92955
 Message 1
        De :     "Frederic *****" <*****@free.fr>
        Sujet :  [CLX] Marci Linux de Cappelle en =?ISO-8859-1?Q?P=E9v=E8le?=
 Message 2
        De :     "walter *****" <*****@belgacom.net>
        Sujet :  Re: [west_vl] index
 Message 3
        De :     "*****.maxime" <*****@wanadoo.fr>
        Sujet :  [west_vl] =?iso-8859-1?q?D=E9c=E8s_Marie_Antoinette_(H)AVET_=E0_Kooigem?=
 etc.
 ...
 +OK Farewell.

Voir aussi