|
ru.cgi.perl- RU.CGI.PERL ------------------------------------------------------------------ From : Andrew 2:5020/400 31 Mar 2001 11:23:33 To : All Subject : Re: Help -------------------------------------------------------------------------------- Sergey Babunin wrote: > > Привет народ! > Я уже месяца 3 мучаюсь с Перлом и не фига не получается. ПАМОГИТЕ!!! > Такая проблема у меня надо чтобы было 2 скрипта первый главный например [здесь был skip] > а во втором ну там например заполнение формы и отправка. > Только чтобы он с этим же "SUB FORM" работал. Если можно то поподробнее и > кодом обясните пожалуйста. > А то я ваще не везжаю как енто делается. Hу ты, блин, мужик мазохист!!! Hиже идут куски моего ИМАП клиента. Это еще даже не пре-альфа, так что код сырой и сильно его разглядывать не надо ,) В List есть пример формы, а в Move & View пример обработки параметров. ################################################################################ ################################################################################ ################################################################################ #!/.../perl -w use CGI; my $query = CGI -> new(); ################################################################################ # ## Configs # ################################################################################ $TEXTCOLOR = 'BLACK'; $LINKCOLOR = 'BLACK'; $FOLDERTEXTCOLOR = 'WHITE'; $FOLDERBGCOLOR = '#2C5D92'; $FOLDERBGCOLOR = '#0054b4'; #$FOLDERBGCOLOR = '#3366cc'; #$FOLDERBGCOLOR = '#009933'; $BGCOLOR = '#c0c0c0'; $REDIRECTTIMEOUT = 5; #секунд ################################################################################ # ## Programm # ################################################################################ $Pages{List} = \&List; $Pages{View} = \&View; $Pages{Move} = \&Move; if ($query -> param('Page') eq 'Move') { Move(); exit; } print $query -> header(); print $query -> start_html(-BGCOLOR => $BGCOLOR, -TEXT => $TEXTCOLOR, -LINK => $LINKCOLOR, -VLINK => $LINKCOLOR); $Pages{$page} -> () || die; sub Move { print $query -> header(-Refresh => "$REDIRECTTIMEOUT; URL=mail.cgi?Page=List"); print $query -> start_html( -BGCOLOR => $BGCOLOR, -TEXT => $TEXTCOLOR, -LINK => $LINKCOLOR, -VLINK => $LINKCOLOR); $DstFolder = $query -> param ('DstFolder'); CheckAuth(); foreach $e ($query -> param ('ChkID')){ ($fold,$mesg) = (split(/:/, $e)); push @{$FLDS{$fold}}, $mesg; $mesg_num ++; } foreach $fold (keys %FLDS){ $imap -> select($fold) || Error("Move | select $fold box"); $imap -> move($DstFolder,@{$FLDS{$fold}}) || Error('Move | move'); $imap -> expunge($fold) || Error("Move | expunge $fold box"); } print "Были перемещены $mesg_num сообщений<BR>"; print "<TABLE BORDER=0 WIDTH=100%><TR><TD BGCOLOR=\"$FOLDERBGCOLOR\" ALIGN=CENTER><FONT COLOR=$FOLDERTEXTCOLOR FACE=Arial><B>Подождите $REDIRECTTIMEOUT секунд, или <A HREF=\"mail.cgi?Page=List\">нажмите сюда</A>.</B></FONT></TD></TR></TABLE>"; } sub List { CheckAuth(); my @folders = $imap -> subscribed(); unshift @folders, "INBOX"; print " <FORM METHOD=GET ACTION=mail.cgi> <TABLE BORDER=0 WIDTH=100%> "; foreach $f (@folders){ print "<TR><TD COLSPAN=6 BGCOLOR=\"$FOLDERBGCOLOR\"><FONT COLOR=$FOLDERTEXTCOLOR FACE=Arial><B>$f</B></FONT></TD></TR>\n"; $imap -> select($f) || Error('select'); $a_ref = $imap -> search("ALL") || Error('search'); if (0 == (scalar @{$a_ref}) ){ print "<TR><TD COLSPAN=6><FONT FACE=Arial><B> В этой папке нет сообщений</B></FONT></TD></TR>\n"; } foreach $mesg (@{$a_ref}){ $url = "mail.cgi?Page=View&Fold=$f&Mesg=$mesg"; uri_escape($url); @flags = $imap -> flags($mesg); $size = $imap -> size($mesg); if ($size > 1_024_000) { $size = sprintf("%.1fM", $size / 1024**2);} elsif($size > 1_024 ) { $size = sprintf("%.1fK", $size / 1024);} $size = $size . ' '; $tmp = join " ", @flags; if ($tmp =~ /\\Seen/) {$new = '';} else{$new = ' <B>N</B> ';} $h_ref = $imap -> parse_headers($mesg,"Subject","Date","From"); $subj = join ('', @{$h_ref -> {'Subject'}}) || 'Without any subject!'; $fromenc = undef; if ($subj =~ /=\?.*/) { if ($subj =~ /=\?koi8-r\?/i) { $subj =~ s/=\?koi8-r\?/=\?iso-8859-1\?/gi; #Это, что б обмануть unmime!!! $subj = unmime($subj); } elsif ($subj =~ /=\?.*?1251\?/i) { $subj =~ s/=\?.*?1251\?/=\?iso-8859-1\?/gi; #Это, что б обмануть unmime!!! $subj = unmime($subj); $fromenc = 'win'; } elsif ($subj =~ /=\?iso-8859-5\?/i) { $subj =~ s/=\?iso-8859-5\?/=\?iso-8859-1\?/gi; #Это, что б обмануть unmime!!! $subj = unmime($subj); $fromenc = 'iso'; } elsif ($subj =~ /=\?cp866\?/i) { $subj =~ s/=\?cp866\?/=\?iso-8859-1\?/gi; #Это, что б обмануть unmime!!! $subj = unmime($subj); $fromenc = 'dos'; } } $subj = convert($fromenc,'koi',$subj) if (defined $fromenc); $subj =~ /(.{0,80})/; $subj = $1; $subj = '<A HREF="'.$url.'">'.$subj.'</A>'; if ($new) {$subj = "<B>$subj</B>";} $date = join ('', @{$h_ref -> {'Date'}}); if ($new) {$date = "<B>$date</B>";} $from = join ('', @{$h_ref -> {'From'}}); $from =~ s/^(.+)<.*>/$1/g; $fromenc = undef; if ($from =~ /=\?.*/) { if ($from =~ /=\?koi8-r\?/i) { $from =~ s/=\?koi8-r\?/=\?iso-8859-1\?/gi; #Это, что б обмануть unmime!!! $from = unmime($from); } elsif ($from =~ /=\?.*?1251\?/i) { $from =~ s/=\?.*?1251\?/=\?iso-8859-1\?/gi; #Это, что б обмануть unmime!!! $from = unmime($from); $fromenc = 'win'; } elsif ($from =~ /=\?iso-8859-5\?/i) { $from =~ s/=\?iso-8859-5\?/=\?iso-8859-1\?/gi; #Это, что б обмануть unmime!!! $from = unmime($from); $fromenc = 'iso'; } elsif ($from =~ /=\?cp866\?/i) { $from =~ s/=\?cp866\?/=\?iso-8859-1\?/gi; #Это, что б обмануть unmime!!! $from = unmime($from); $fromenc = 'dos'; } } $from = convert($fromenc,'koi',$from) if (defined $fromenc); $from = '<A HREF="'.$url.'">'.$from.'</A>'; if ($new) {$subj = "<B>$subj</B>";} $new = ' ' unless ($new); print " <TR> <TD><FONT COLOR=$TEXTCOLOR FACE=Arial SIZE=-1>".$new ."</FONT></TD> <TD><INPUT TYPE=CHECKBOX NAME=ChkID VALUE=\"$f:$mesg\"></TD> <TD><FONT COLOR=$TEXTCOLOR FACE=Arial SIZE=-1>".$subj."</FONT></TD> <TD><FONT COLOR=$TEXTCOLOR FACE=Arial SIZE=-1>".$date."</FONT></TD> <TD ALIGN=RIGHT><FONT COLOR=$TEXTCOLOR FACE=Arial SIZE=-1>".$size."</FONT></TD> <TD><FONT COLOR=$TEXTCOLOR FACE=Arial SIZE=-1>".$from."</FONT></TD> </TR> "; } } $selectmv = '<SELECT NAME=DstFolder>'; foreach $f (@folders){ $selectmv .= "<OPTION VALUE=$f>$f</OPTION>"; } $selectmv.= '</SELECT>'; $selectus = $selectmv; $selectus =~ s/NAME=DstFolder/NAME=UnsubscribeFolder/g; $selectus =~ s/<OPTION VALUE=INBOX>INBOX<\/OPTION>//g; $selectdr = $selectus; $selectdr =~ s/NAME=UnsubscribeFolder/NAME=DropFolder/g; print " </TABLE> <TABLE BORDER=1> <TR><TD BGCOLOR=\"$FOLDERBGCOLOR\"><FONT COLOR=$FOLDERTEXTCOLOR FACE=Arial><B>Работа с письмами: </B></FONT></TD><TD><INPUT TYPE=SUBMIT Name=Page VALUE=Delete></TD><TD><INPUT TYPE=SUBMIT Name=Page VALUE=Move> to: $selectmv</TD></TR> <TR> <TD BGCOLOR=\"$FOLDERBGCOLOR\"> <FONT COLOR=$FOLDERTEXTCOLOR FACE=Arial><B>Работа с папками: </B></FONT> </TD> <TD> <INPUT TYPE=SUBMIT Name=Page VALUE=Create> </TD> <TD> <INPUT TYPE=SUBMIT Name=Page VALUE=Subscribe> </TD> <TD> <INPUT TYPE=SUBMIT Name=Page VALUE=Unsubscribe> from: $selectus </TD> <TD> <INPUT TYPE=SUBMIT Name=Page VALUE=Drop> $selectdr </TD> </TR> </TABLE> </FORM> "; } sub View { CheckAuth(); my $mesg = $query -> param('Mesg'); my $fold = $query -> param('Fold'); $imap -> select($fold) || Error('select'); $h_ref = $imap -> parse_headers($mesg,"Subject","Date","From","Reply-To","Return-Path","To","Newsg roups","Cc","Bcc") || Error('Parse Header into View'); $header = "<TABLE BORDER=0>\n"; $subj = join "\n", @{$h_ref -> {'Subject'}}; $fromenc = undef; if ($subj =~ /=\?.*/) { if ($subj =~ /=\?koi8-r\?/i) { $subj =~ s/=\?koi8-r\?/=\?iso-8859-1\?/gi; #Это, что б обмануть unmime!!! $subj = unmime($subj); } elsif ($subj =~ /=\?.*?1251\?/i) { $subj =~ s/=\?.*?1251\?/=\?iso-8859-1\?/gi; #Это, что б обмануть unmime!!! $subj = unmime($subj); $fromenc = 'win'; } elsif ($subj =~ /=\?iso-8859-5\?/i) { $subj =~ s/=\?iso-8859-5\?/=\?iso-8859-1\?/gi; #Это, что б обмануть unmime!!! $subj = unmime($subj); $fromenc = 'iso'; } elsif ($subj =~ /=\?cp866\?/i) { $subj =~ s/=\?cp866\?/=\?iso-8859-1\?/gi; #Это, что б обмануть unmime!!! $subj = unmime($subj); $fromenc = 'dos'; } } $subj = convert($fromenc,'koi',$subj) if (defined $fromenc); if ($subj) { $subj =~ s/>/>/g; $subj =~ s/</</g; $subj =~ s/ / /g; $header .= "<TR><TD BGCOLOR=$FOLDERBGCOLOR><FONT COLOR=$FOLDERTEXTCOLOR FACE=Arial><B>Subject: </B></FONT></TD><TD><FONT COLOR=$TEXTCOLOR FACE=Courier SIZE=+0>$subj</FONT></TD></TR>"; } $date = join "\n", @{$h_ref -> {'Date'}}; if ($date) { $date =~ s/>/>/g; $date =~ s/</</g; $date =~ s/ / /g; $header .= "<TR><TD BGCOLOR=$FOLDERBGCOLOR><FONT COLOR=$FOLDERTEXTCOLOR FACE=Arial><B>Date: </B></FONT></TD><TD><FONT COLOR=$TEXTCOLOR FACE=Courier SIZE=+0>$date</FONT></TD></TR>"; } $from = join "\n", @{$h_ref -> {'From'}}; $fromenc = undef; if ($from =~ /=\?.*/) { if ($from =~ /=\?koi8-r\?/i) { $from =~ s/=\?koi8-r\?/=\?iso-8859-1\?/gi; #Это, что б обмануть unmime!!! $from = unmime($from); } elsif ($from =~ /=\?.*?1251\?/i) { $from =~ s/=\?.*?1251\?/=\?iso-8859-1\?/gi; #Это, что б обмануть unmime!!! $from = unmime($from); $fromenc = 'win'; } elsif ($from =~ /=\?iso-8859-5\?/i) { $from =~ s/=\?iso-8859-5\?/=\?iso-8859-1\?/gi; #Это, что б обмануть unmime!!! $from = unmime($from); $fromenc = 'iso'; } elsif ($from =~ /=\?cp866\?/i) { $from =~ s/=\?cp866\?/=\?iso-8859-1\?/gi; #Это, что б обмануть unmime!!! $from = unmime($from); $fromenc = 'dos'; } } $from = convert($fromenc,'koi',$from) if (defined $fromenc); if ($from) { $from =~ s/>/>/g; $from =~ s/</</g; $from =~ s/ / /g; $header .= "<TR><TD BGCOLOR=$FOLDERBGCOLOR><FONT COLOR=$FOLDERTEXTCOLOR FACE=Arial><B>From: </B></FONT></TD><TD><FONT COLOR=$TEXTCOLOR FACE=Courier SIZE=+0>$from</FONT></TD></TR>"; } $repl = join "\n", @{$h_ref -> {'Reply-To'}}; $fromenc = undef; if ($repl =~ /=\?.*/) { if ($repl =~ /=\?koi8-r\?/i) { $repl =~ s/=\?koi8-r\?/=\?iso-8859-1\?/gi; #Это, что б обмануть unmime!!! $repl = unmime($repl); } elsif ($repl =~ /=\?.*?1251\?/i) { $repl =~ s/=\?.*?1251\?/=\?iso-8859-1\?/gi; #Это, что б обмануть unmime!!! $repl = unmime($repl); $fromenc = 'win'; } elsif ($repl =~ /=\?iso-8859-5\?/i) { $repl =~ s/=\?iso-8859-5\?/=\?iso-8859-1\?/gi; #Это, что б обмануть unmime!!! $repl = unmime($repl); $fromenc = 'iso'; } elsif ($repl =~ /=\?cp866\?/i) { $repl =~ s/=\?cp866\?/=\?iso-8859-1\?/gi; #Это, что б обмануть unmime!!! $repl = unmime($repl); $fromenc = 'dos'; } } $repl = convert($fromenc,'koi',$repl) if (defined $fromenc); if ($repl) { $repl =~ s/>/>/g; $repl =~ s/</</g; $repl =~ s/ / /g; $header .= "<TR><TD BGCOLOR=$FOLDERBGCOLOR><FONT COLOR=$FOLDERTEXTCOLOR FACE=Arial><B>Reply-To: </B></FONT></TD><TD><FONT COLOR=$TEXTCOLOR FACE=Courier SIZE=+0>$repl</FONT></TD></TR>"; } $retn = join "\n", @{$h_ref -> {'Return-Path'}}; $fromenc = undef; if ($retn =~ /=\?.*/) { if ($retn =~ /=\?koi8-r\?/i) { $retn =~ s/=\?koi8-r\?/=\?iso-8859-1\?/gi; #Это, что б обмануть unmime!!! $retn = unmime($retn); } elsif ($from =~ /=\?.*?1251\?/i) { $retn =~ s/=\?.*?1251\?/=\?iso-8859-1\?/gi; #Это, что б обмануть unmime!!! $retn = unmime($retn); $fromenc = 'win'; } elsif ($retn =~ /=\?iso-8859-5\?/i) { $retn =~ s/=\?iso-8859-5\?/=\?iso-8859-1\?/gi; #Это, что б обмануть unmime!!! $retn = unmime($retn); $fromenc = 'iso'; } elsif ($retn =~ /=\?cp866\?/i) { $retn =~ s/=\?cp866\?/=\?iso-8859-1\?/gi; #Это, что б обмануть unmime!!! $retn = unmime($retn); $fromenc = 'dos'; } } $retn = convert($fromenc,'koi',$retn) if (defined $fromenc); if ($retn) { $retn =~ s/>/>/g; $retn =~ s/</</g; $retn =~ s/ / /g; $header .= "<TR><TD BGCOLOR=$FOLDERBGCOLOR><FONT COLOR=$FOLDERTEXTCOLOR FACE=Arial><B>Return-Path: </B></FONT></TD><TD><FONT COLOR=$TEXTCOLOR FACE=Courier SIZE=+0>$retn</FONT></TD></TR>"; } $news = join "\n", @{$h_ref -> {'Newsgroups'}}; $fromenc = undef; if ($news =~ /=\?.*/) { if ($news =~ /=\?koi8-r\?/i) { $news =~ s/=\?koi8-r\?/=\?iso-8859-1\?/gi; #Это, что б обмануть unmime!!! $news = unmime($news); } elsif ($news =~ /=\?.*?1251\?/i) { $news =~ s/=\?.*?1251\?/=\?iso-8859-1\?/gi; #Это, что б обмануть unmime!!! $news = unmime($news); $fromenc = 'win'; } elsif ($news =~ /=\?iso-8859-5\?/i) { $news =~ s/=\?iso-8859-5\?/=\?iso-8859-1\?/gi; #Это, что б обмануть unmime!!! $news = unmime($news); $fromenc = 'iso'; } elsif ($news =~ /=\?cp866\?/i) { $news =~ s/=\?cp866\?/=\?iso-8859-1\?/gi; #Это, что б обмануть unmime!!! $news = unmime($news); $fromenc = 'dos'; } } $news = convert($fromenc,'koi',$news) if (defined $fromenc); if ($news){ $news =~ s/>/>/g; $news =~ s/</</g; $news =~ s/ / /g; $header .= "<TR><TD BGCOLOR=$FOLDERBGCOLOR><FONT COLOR=$FOLDERTEXTCOLOR FACE=Arial><B>Newsgroups: </B></FONT></TD><TD><FONT COLOR=$TEXTCOLOR FACE=Courier SIZE=+0>$news</FONT></TD></TR>"; } $to = join "\n", @{$h_ref -> {'To'}}; $fromenc = undef; if ($to =~ /=\?.*/) { if ($to =~ /=\?koi8-r\?/i) { $to =~ s/=\?koi8-r\?/=\?iso-8859-1\?/gi; #Это, что б обмануть unmime!!! $to = unmime($to ); } elsif ($to =~ /=\?.*?1251\?/i) { $to =~ s/=\?.*?1251\?/=\?iso-8859-1\?/gi; #Это, что б обмануть unmime!!! $to = unmime($to ); $fromenc = 'win'; } elsif ($to =~ /=\?iso-8859-5\?/i) { $to =~ s/=\?iso-8859-5\?/=\?iso-8859-1\?/gi; #Это, что б обмануть unmime!!! $to = unmime($to ); $fromenc = 'iso'; } elsif ($to =~ /=\?cp866\?/i) { $to =~ s/=\?cp866\?/=\?iso-8859-1\?/gi; #Это, что б обмануть unmime!!! $to = unmime($to ); $fromenc = 'dos'; } } $to = convert($fromenc,'koi',$to ) if (defined $fromenc); if ($to){ $to =~ s/>/>/g; $to =~ s/</</g; $to =~ s/ / /g; $header .= "<TR><TD BGCOLOR=$FOLDERBGCOLOR><FONT COLOR=$FOLDERTEXTCOLOR FACE=Arial><B>To: </B></FONT></TD><TD><FONT COLOR=$TEXTCOLOR FACE=Courier SIZE=+0>$to</FONT></TD></TR>"; } $cc = join "\n", @{$h_ref -> {'Cc'}}; $fromenc = undef; if ($cc =~ /=\?.*/) { if ($cc =~ /=\?koi8-r\?/i) { $cc =~ s/=\?koi8-r\?/=\?iso-8859-1\?/gi; #Это, что б обмануть unmime!!! $cc = unmime($cc ); } elsif ($cc =~ /=\?.*?1251\?/i) { $cc =~ s/=\?.*?1251\?/=\?iso-8859-1\?/gi; #Это, что б обмануть unmime!!! $cc = unmime($cc ); $fromenc = 'win'; } elsif ($cc =~ /=\?iso-8859-5\?/i) { $cc =~ s/=\?iso-8859-5\?/=\?iso-8859-1\?/gi; #Это, что б обмануть unmime!!! $cc = unmime($cc ); $fromenc = 'iso'; } elsif ($cc =~ /=\?cp866\?/i) { $cc =~ s/=\?cp866\?/=\?iso-8859-1\?/gi; #Это, что б обмануть unmime!!! $cc = unmime($cc ); $fromenc = 'dos'; } } $cc = convert($fromenc,'koi',$cc ) if (defined $fromenc); if ($cc){ $cc =~ s/>/>/g; $cc =~ s/</</g; $cc =~ s/ / /g; $header .= "<TR><TD BGCOLOR=$FOLDERBGCOLOR><FONT COLOR=$FOLDERTEXTCOLOR FACE=Arial><B>Cc: </B></FONT></TD><TD><FONT COLOR=$TEXTCOLOR FACE=Courier SIZE=+0>$cc</FONT></TD></TR>"; } $bcc = join "\n", @{$h_ref -> {'Bcc'}}; $fromenc = undef; if ($bcc =~ /=\?.*/) { if ($bcc =~ /=\?koi8-r\?/i) { $bcc =~ s/=\?koi8-r\?/=\?iso-8859-1\?/gi; #Это, что б обмануть unmime!!! $bcc = unmime($bcc ); } elsif ($bcc =~ /=\?.*?1251\?/i) { $bcc =~ s/=\?.*?1251\?/=\?iso-8859-1\?/gi; #Это, что б обмануть unmime!!! $bcc = unmime($bcc ); $fromenc = 'win'; } elsif ($bcc =~ /=\?iso-8859-5\?/i) { $bcc =~ s/=\?iso-8859-5\?/=\?iso-8859-1\?/gi; #Это, что б обмануть unmime!!! $bcc = unmime($bcc ); $fromenc = 'iso'; } elsif ($bcc =~ /=\?cp866\?/i) { $bcc =~ s/=\?cp866\?/=\?iso-8859-1\?/gi; #Это, что б обмануть unmime!!! $bcc = unmime($bcc ); $fromenc = 'dos'; } } $bcc = convert($fromenc,'koi',$bcc ) if (defined $fromenc); if ($bcc){ $bcc =~ s/>/>/g; $bcc =~ s/</</g; $bcc =~ s/ / /g; $header .= "<TR><TD BGCOLOR=$FOLDERBGCOLOR><FONT COLOR=$FOLDERTEXTCOLOR FACE=Arial><B>Bcc: </B></FONT></TD><TD><FONT COLOR=$TEXTCOLOR FACE=Courier SIZE=+0>$bcc</FONT></TD></TR>"; } $header =~ s/<\/TR>/<\/TR>\n/g; $header =~ s/\t/ /g; $header .= "</TABLE><HR>\n\n"; print "$header"; $text = $imap -> message_string($mesg); $parser = MIME::Parser -> new (); unless (-d 'MIME-tmp/'.$Login) { if (-e 'MIME-tmp/'.$Login){ Error('Hевозможно создать директорию для временных файлов'); } else { mkdir ('MIME-tmp/'.$Login, 0300) || Error('Hевозможно создать директорию для временных файлов'); } } $parser -> output_dir('MIME-tmp/'.$Login); $parser -> output_to_core('NONE'); $parser -> parse_nested_messages('REPLACE'); $entity = $parser -> parse_data($text) || Error('View MIME'); $text = MIME_Decode($entity,'main'); $text =~ s/<BR>\n/\n/g; $text =~ s/\n/<BR>\n/g; print "<FONT COLOR=$TEXTCOLOR FACE=Courier SIZE=+1>", $text, "</FONT>"; } --- ifmail v.2.15dev5 * Origin: BIC (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.cgi.perl/120283335b0df.html, оценка из 5, голосов 10
|