#
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 ...
# + 02.12.2021, nowa wersja imap4_for_mime,
# radzi sobie z nowa skrzynka mailowa,
# toleruje brakujace pola typu "from:"
proc imap4_for_mime {i1 mess_id} {
set lista_pol {from: content-type: subject: text}
imap4::fetch $i1 $mess_id {*}$lista_pol
set _ ""
foreach p [imap4::msginfo $i1 $mess_id] {
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]]
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