ещё одна проблема : есть таблица, надо её заполнить. данные для заполнения в функции : как мне это осущетвить?
Код | sub LISTandRETR { print $socket "LIST\n"; my $invitation=<$socket>; $invitation=~/(\d+)\D+(\d+)/; # выделяем кол-во сообщений и их объём my $qt=$1; # колличество сообщений my $s=$2; # объём почтового ящика my @list; while(1){ my $str = <$socket>; push @list,$str; last unless $str=~/(\d+)/; } my $i=0; while($i<$qt) { $invitation=$list[$i]; $i++; $invitation=~m/(\d+)\s(\d+)/; # для вывода номера и размера письм my $num = $1; my $size = $2; print F"Number : $num\n"; print F"Octets : $size\n"; my $let=$1; ####################################################################### print $socket "RETR $num\n"; my $str; my $buf; vec(my $win, fileno($socket), 1) = 1; my $timeout = 10; while(1){ my $p = select($win, undef, undef, $timeout); if($p>0){ sysread($socket,$str,1024); }else{ print "Timeout\n"; } $buf .=$str; last if $str=~/\n?\.\r\n$/; #выходим когда получили точку } #print $buf; if($buf=~/Subject:\s\=\?KOI8\-R\?B\?(.*)\?\=/){ my $k=$1; my $m=decode_base64($k); Encode::from_to($m, "KOI8-R", "cp1251"); print F "Subject: $m\n"; } elsif($buf=~/Subject:\s(\w+)/) { print F "Subject: $1\n"; } if($buf=~/Content-Type:\smiltipart\/mixed;\sboundary\=(.*)[\r\n]{4}(.+)/sg){ my $message=$1; print $message; } if($buf=~m/Date:\s(.+)/g){ print F "Date : $1\n"; } if($buf=~/From:\s\=\?KOI8\-R\?B\?(.*)\?\=(.+)/i){ $a=$1; $s=decode_base64($a); Encode::from_to($s, "KOI8-R", "cp1251"); print F "From : $s $2\n"; } elsif($buf=~/From:\s(.+(\<?)+.*(\>?)+)/i){ print F "From : $1\n"; } if($buf=~/Content-Type:\stext\/plain;\scharset=KOI8-R[\r\n]{2}Content-Transfer-Encoding:\sbase64[\r\n]{4}([\w\r\n\=\+\/]+)/gs) { my $k=$1; my $h=decode_base64($k); Encode::from_to($h, "KOI8-R", "cp1251"); print F "Message :\n $h \n"; } elsif($buf=~/Content-Type:\stext\/html;\scharset=KOI8-R[\r\n]{2}Content-Transfer-Encoding:\sbase64[\r\n]{4}([\w\r\n\=\+\/]+)[\r\n]{4}/gs) { my $k=$1; my $h=decode_base64($k); Encode::from_to($h, "KOI8-R", "cp1251"); print F "Message :\n $h \n"; } elsif($buf=~/Content-Type:\stext\/plain;\scharset=KOI8-R[\r\n]{4}(.+)[\r\n]{4}\-/){ my $k=$1; #my $h=decode_base64($k); Encode::from_to($k, "KOI8-R", "cp1251"); print F "Message :\n $k \n"; } print F"<--------------------------->\n"; while($buf=~/Content-Disposition:\sattachment;\s(\n)?(\s+)?filename="(.*)"/g){ # filename, baby my $filename=$3; open S, ">:raw", $filename; if($buf=~/X-Attachment-Id:\s\w+[\r\n]{4}([\w\r\n\=\+\/]+)/sg){ my $file=$1; #print $file; $file=decode_base64($file); print S "$file"; close S; } } } }
|
Код | sub retr { my $wow = $mw->Toplevel; $wow->geometry("500x500"); $wow->title(decode("cp1251","")); $wow -> resizable(0,0); my $mf = $wow->Button( -text => decode('cp1251',"Удалить"), -width => 20, -relief => 'groove', -command => \&oh)->pack(-side => "top"); my $scroll_text = $wow->Scrollbar(); my $main_text = $wow->Text(-yscrollcommand => ['set', $scroll_text], -foreground => 'red'); my $table_frame = $wow->Frame()->pack(); my $table = $table_frame->Table(-columns => 12, -rows => 4, -fixedrows => 1, -scrollbars => 'oe', -relief => 'raised'); my $tmp_label = $table->Label(-text => decode("cp1251","Номер"), -width => 8, -relief =>'raised'); $table->put(0, 1, $tmp_label); $tmp_label = $table->Label(-text => decode("cp1251","От кого"), -width => 8, -relief =>'raised'); $table->put(0, 2, $tmp_label); $tmp_label = $table->Label(-text => decode("cp1251","Заголовок"), -width => 10, -relief =>'raised'); $table->put(0, 3, $tmp_label); $tmp_label = $table->Label(-text => decode("cp1251","Дата"), -width => 8, -relief =>'raised'); $table->put(0, 4, $tmp_label); }
|
|