## pakiety imap4 oraz mime do zarzadzania skrzynka mailowa na serwerze... # lappend auto_path ~/tcl/tls1.5; package re tls #% 1.50 lappend auto_path ./imap4_tcl84; package re imap4 #% 0.5.2 set imap4::use_ssl 1 set i1 [imap4::open imap.amu.edu.pl 993] #% sock5 set pass ??? imap4::login $i1 mhanckow $pass #imap4::logout $i1 # + zeby sie wylogowac TRZEBA byc w stanie SELECT (?!?) #imap4::cleanup $i1 imap4::state $i1 #% AUTH #% SELECT join [imap4::folders $i1 -inline] \n # + wyswietla foldery na serwerze pocztowym imap4::folderinfo $i1 #% delim names flags match # + to dziala dopiero po wywolaniu folders! imap4::folderinfo $i1 names # + wyswietla wartosc pola o podanej nazwie imap4::select $i1 test1 #% 0 # + wybieramy jeden z folderow #imap4::close $i1 # + przed nastepnym select musi byc close! imap4::mboxinfo $i1 #% current perm exists uidnext uidval recent permflags flags imap4::mboxinfo $i1 flags #% \Answered \Flagged \Deleted \Seen \Draft NonJunk set q1 [imap4::fetch $i1 : -inline date: uid]; llength $q1 #% 3 # + w fetch podaje sie o ktore maile chodzi FROM:TO (chodzi o liczbe porzadkowa) # oraz jakie pola chcemy zobaczyc, moga to byc naglowki np. "date:" # lub pseudopola: uid, size, text # + opcja -inline powoduje ze wartosci pol zostana w tym miejscu podane # bez -inline mozna je potem odczytywac przez msginfo join $q1 \n #% {Wed, 15 Apr 2015 11:08:42 +0200 } 2 {Fri, 17 Apr 2015 12:42:31 +0200 } 4 {Fri, 17 Apr 2015 16:39:55 +0200 } 5 # + wyswietlamy wszystkie maile (":") oraz pola "date:" i "uid" set q2 [imap4::fetch $i1 : -inline uid]; llength $q1 expr {[lsearch $q2 4]+1}; # poszukiwanie uid-a; zwraca lp maila (od 1) #% 2 imap4::fetch $i1 3 date: from: content-type: subject: text #% 0 # + przy fetch podaje sie lp maili ORAZ naglowki/pola, ktore maja byc sciagniete... imap4::msginfo $i1 1 #% uid date: imap4::msginfo $i1 2 #% uid date: imap4::msginfo $i1 3 #% content-type: date: text subject: from: uid # + pola sa widoczne dopiero PO sciagnieciu przez fetch !!! imap4::msginfo $i1 3 subject: #% test3 # + przez msginfo odczytuje sie dane maila po 1 polu! # + ew. mozna odczytac cala/fragment kolumny, np. "msginfo $i1 1:10 subject:" # ... lappend auto_path ~/tcl/tcllib; package re mime #% 1.5.4 # + aby dalo sie uzywac mime z imap4 # trzeba skonstuowac "surowa" postac maila # m.in. trzeba okreslic ktore pola/naglowki sa potrzebne ... proc imap4_for_mime {i1 mess_id} { set lista_pol {from: content-type: subject: text} # + trzeba recznie podac ktore pola sa potrzebne !!! eval imap4::fetch $i1 $mess_id $lista_pol set _ "" foreach p $lista_pol { if {[string match *: $p]} {append _ "$p [imap4::msginfo $i1 $mess_id $p]\n"} } append _ "\n" append _ [string map {\r\n \n} [imap4::msginfo $i1 $mess_id text]] # + w tresci maila zamieniam \r\n na \n (to chyba nie jest potrzebne??) #append _ [imap4::msginfo $i1 $mess_id text] return $_ } set m1 [mime::initialize -string [imap4_for_mime $i1 1]] mime::getproperty $m1 content #% multipart/alternative set m2 [mime::getproperty $m1 parts] #% ::mime::1-1 ::mime::1-2 mime::getproperty [lindex $m2 0] content #% text/plain mime::getbody [lindex $m2 0] # + wyswietla tresc tej czesci maila mime::getproperty [lindex $m2 1] content #% multipart/related mime::finalize $m1