dc Gmail est le fameux service de mails de Google.
On peut activer le support [imap] pour consulter la messagerie. Il faut activer une connexion [SSL]. En farfouillant sur le wiki anglophone, j'ai trouvé cette page [1] 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 monsupermotdepasse
set compteur 0
proc Write {chan} {
fileevent $chan writable {}
tls::handshake $chan
fconfigure $chan -buffering line -blocking 0 -translation crlf
attenteReponse $chan {\* OK}
identification $chan
set nb [recupNbMessages $chan]
recupInfoMessages $chan $nb
aurevoir $chan
}
proc prefixe {} {
return [format A%03d [incr ::compteur]]
}
proc attenteReponse {chan c} {
set l [gets $chan]
while {![regexp $c $l]} {
set l [gets $chan]
#if {$l!=""} {puts $l}
}
puts $l
return $l
}
proc envoiCommande {chan com {c {A[0-9]+}}} {
puts $chan $com
attenteReponse $chan $c
}
proc identification {chan} {
envoiCommande $chan "[prefixe] LOGIN $::idMail $::passMail"
}
proc aurevoir {chan} {
envoiCommande $chan "[prefixe] LOGOUT"
set ::forever 1
}
proc recupNbMessages {chan} {
puts $chan "[prefixe] SELECT INBOX"
set l [gets $chan]
while {![regexp {A[\d]+} $l]} {
if {[regexp {([\d]+) EXISTS$} $l -> nb]} {
puts "$nb nouveaux messages"
}
set l [gets $chan]
}
puts $l
return $nb
}
proc recupInfoMessages {chan nb} {
# on récupère/parse les entêtes
for {set i 0} {$i<$nb} {incr i} {
puts $chan "[prefixe] FETCH [expr {$i+1}] BODY\[HEADER]"
puts "Message [expr {$i+1}]"
set l [gets $chan]
while {![regexp {A[\d]+ OK Success} $l]} {
if {![info exists from]} {
regexp {From: (.*)$} $l -> from
}
if {![info exists sujet]} {
regexp {Subject: (.*)$} $l -> sujet
}
set l [gets $chan]
}
puts "\tDe :\t $from"
puts "\tSujet :\t $sujet"
unset from
unset sujet
}
}
set sock [tls::socket -async imap.gmail.com 993]
fconfigure $sock -encoding binary -buffering none -blocking 1
fileevent $sock writable [list Write $sock]
vwait ::foreverÇa donne en sortie quelque chose comme :
* OK Gimap ready for requests from ***.***.***.*** p9if153512fkb.0
A001 OK *****.*****@gmail.com authenticated (Success)
26 nouveaux messages
A002 OK [READ-WRITE] INBOX selected. (Success)
Message 1
De : ***** <*****@*****>
Sujet : =?ISO-8859-1?Q?N'oubliez_pas_la_f=EAte_des_m=E8res...?=
Message 2
De : ***** <*****@*****>
Sujet : =?ISO-8859-1?Q?Re:_la_meilleur_fa=C3=A7on_de_marcher..._was[Re:_[GLA?=
etc.
...
A029 OK 73 good day (Success)Voir Aussi