Hi,
--On Mittwoch, 6. Oktober 2004 15:25 Uhr -0700 Rob Tanner <[EMAIL PROTECTED]> wrote:
My other thought was to write my own, using the Cyrus::SIEVE::managesieve package, but there's no helpful documentation that I could find.
Has anyone resolved this problem?
well, we have a script that does use the Perl module. I didn't write it myself, but I think it's OK to attach it. This script prompts for password info, but obviously you could get that from somewhere else as well.
Cheers, Sebastian Hagedorn -- Sebastian Hagedorn M.A. - RZKR-R1 (Gebäude 52), Zimmer 18 Zentrum für angewandte Informatik - Universitätsweiter Service RRZK Universität zu Köln / Cologne University - Tel. +49-221-478-5587
#!/vol/gnu/bin/perl5.6 -w
require File::Temp; use Cyrus::SIEVE::managesieve; use File::Temp qw/ tempfile /; use CGI qw(:standard); use CGI::Carp qw(fatalsToBrowser); use strict; ## Interaktiv oder ueber cgi gestartet ## interaktiv (0), cgi (-1, wird zu 1) my $SysMode=(system("/usr/bin/tty -s") == 0) ? 0 : 1; # Wer bin ich? my $whoami=($SysMode) ? $ENV{'SCRIPT_NAME'} : $0 ; $whoami =~ s/.+\/(.+)$/$1/g; my $scriptname = "rrzk"; my $ImapServer = "imap.uni-koeln.de"; my $user; my $passwd; my $spamlevel; my $spamfolder; my $ServerHandle; my $TmpHandle; my $TmpFileName; my $error; my $message; my $ret; my $mode; my $mode_txt; my $mode_tag; ######## # Texte ######## my $head=<<"..."; ZAIK/RRZK Sieve-Konfiguration (CO, 30.01.2004) ... my $intro1=<<"..."; Auf dem zentralen Mailserver des ZAIK/RRZK wird eingehende Mail mit Spamassassin untersucht. Erkannte SPAM-Emails werden dabei markiert. Diese Emails koennen wahlweise mit geeigneten Mailklienten beim Benutzer, oder auf dem Server mit Sieve gefiltert werden. Von Spamassassin markierte Mails werden dabei in ein Mailverzeichniss verschoben oder geloescht. Dieses Skript dient der Konfiguration Ihres SPAM-Filters mit Sieve. ... my $intro2=<<"..."; Das Mailverzeichnis, in das die SPAMs verschoben sollen, muessen Sie mit Ihrem Mailklienten erzeugen, bevor die Aenderung wirksam werden kann. ... my $link=<<"..."; http://www.uni-koeln.de/rrzk/mail/spam/spamcfg ... my $info=<<"..."; Bitte geben Sie Ihren Benutzernamen und Ihr Passwort f¸r den Rechner imap.uni-koeln.de ein und w?hlen Sie den SPAM-Level (0-9) aus, ab dem die Mail gefiltert werden soll. Sie koennen auswaehlen, ob die Mail geloescht oder in einen Ordner verschoben werden soll. Geben Sie in diesem Fall auch den Namen des Ordners an. Beachten Sie die Gross- bzw. Kleinschreibung des Ordnernamens. ... my $hinweis=<<"..."; Achtung: Vorhandene benutzerdefinierte Sieve-Filter werden deaktiviert! ... my $fertig=<<"..."; Fuer Sie wurde ein Sieve-Script mit dem Namen rrzk angelegt und aktiviert, das Sie bei Bedarf mit Smartsieve bearbeiten koennen. (https://smartsieve.uni-koeln.de/smartsieve/) Auch Deaktivierung und Loeschen des Scripts sind auf diesem Weg moeglich. Denken Sie daran, das Mailverzeichnis fuer SPAM-Mails mit Ihrem Mailklienten auf dem Server anzulegen. ... ################ # CGI-Variablen ################ my $cgi = new CGI; #HTML my $titel=$whoami; my $author_email="[EMAIL PROTECTED]"; my $attribut="bgcolor=#003399"; #Formulardaten my $method="post"; my $action=$whoami; my $encoding=$cgi->URL_ENCODED; # Seiten-Header my $Header=<<"..."; ... # Seiten-Footer my $Footer=<<"..."; <hr> <table> <tr><td nowrap> <ADDRESS> <A HREF="http://www.uni-koeln.de/rrzk/Autoren/CO"><small>Berthold Cogel</small></A> </ADDRESS> </td></tr> <tr><td> <table><tr><td width="15\%" valign="top" nowrap><small><b>\©</b>2003</small> </td><td align="center" valign="top" nowrap><small>Zentrum f\ü\;r Angew. Informatik (ZAIK),<br>Universit\ä\;tsweiter Service (RRZK)</small></td></tr></table> </td> </tr> </table> ... # Radiobuttons 'Modus' my $radio="mode"; my @radio_value=('move','delete'); my %radio_label=('move'=>' in SPAM-Ordner verschieben','delete'=>' l?schen'); my $radio_default='move'; my $radio_selected=$radio_default; ################## # Sieve Variablen ################## my $move_txt = "fileinto \"SPAM\""; my $move_tag = "folder\&\&SPAM"; my $delete_txt = "discard"; my $delete_tag = "discard\&\&"; my $SieveScript=<<"..."; #Mail filter rules for rrzk #Generated by rrzk require ["fileinto","regex"]; if allof (header :regex "X-Spam-Level" "*****") { MODETXT; } ##PSEUDO script start #rule&&1&&ENABLED&&&&&&&&MODETAG&&128&&X-Spam-Level&&*****&& #mode&&basic ... ####### # MAIN ####### if ($SysMode){ # Aufruf als CGI #Browser hat Formulardaten gesendet if ($cgi->param()){ get_parameter(); } else{ # erster Seitenaufruf, sende Login-Formular showlogin(); exit; } } else{ # Programm wird interaktiv benutzt #Cyrus-SASL-Libraries (NUR fuer Campfire) $ENV{SASL_PATH} = '/vol/local/lib/sasl2/'; print $head; print $intro1; print $intro2; print $link; print $hinweis; print $info; print $hinweis; print "Weiter mit Enter"; prompt("",""); print "Verbindung zu $ImapServer wird aufgebaut\n"; $user = $ENV{USER}; } # Verbindung zum IMAP-Server aufbauen $ServerHandle = sieve_get_handle($ImapServer,"prompt","prompt","prompt","prompt"); if (!defined $ServerHandle){message($titel,"Fehler: Keine Verbindung zu $ImapServer");} # Spam-Level erfragen $spamlevel = prompt("spamlevel","Spam-Level"); if (!defined $spamlevel){message($titel,"Fehler: Unzulaessiger Spamlevel");} # Modus erfragen $mode = prompt("mode","Modus (v)erschieben/(l)oeschen"); if (!defined $mode){message($titel,"Fehler: Unzulaessiger Modus");} if ($mode eq "move"){ $mode_txt = $move_txt; $mode_tag = $move_tag; } elsif($mode eq "delete"){ $mode_txt = $delete_txt; $mode_tag = $delete_tag; } if ($mode eq "move"){ # Spam-Ordner erfragen $mode = prompt("spamfolder","SPAM-Ordner"); if (!defined $spamfolder){message($titel,"Fehler: Unzulaessiger SPAM-Ordner");} $mode_txt =~ s/SPAM/$spamfolder/g; $mode_tag =~ s/SPAM/$spamfolder/g; } # Spam-Level im Script setzen $SieveScript =~ s/\*\*\*\*\*/"\\\\\*"x$spamlevel/ge; # Modus im Script setzen $SieveScript =~ s/MODETXT/$mode_txt/g; $SieveScript =~ s/MODETAG/$mode_tag/g; # Tempfile anlegen ($TmpHandle,$TmpFileName) = tempfile(); if (!$TmpHandle) {message($titel,"Fehler: Kann Temp-File nicht oeffnen!:$?");} # Tempfile schreiben print $TmpHandle $SieveScript; # Rewind, sonst ist Filelaenge 0 bei Uebertragung seek $TmpHandle,0,0; # Script-Upload $ret = sieve_put_file_withdest($ServerHandle,$TmpFileName,$scriptname); if ($ret != 0){ $error = sieve_get_error($ServerHandle); $error = "Unbekannter Fehler" if (!defined $error); message($titel,"Fehler: Upload fehlgeschlagen: $error"); } # Script-Aktivierung $ret = sieve_activate($ServerHandle,$scriptname); if ($ret != 0){ $error = sieve_get_error($ServerHandle); $error = "Unbekannter Fehler" if (!defined $error); message("Fehler","Aktivierung fehlgeschlagen: $error"); } # Tempfile loeschen unlink ("$TmpFileName"); message($titel,$fertig); exit; ############################# # Authentifizierung abfragen ############################# sub prompt { my ($type,$prompt) = @_; # print "$type,$prompt\n"; if (($type eq "username") && (defined $user)){ return $user; } elsif (($type eq "authname") && (defined $user)){ return $user; } elsif (($type eq "spamlevel") && (defined $spamlevel)){ return $spamlevel; } elsif (($type eq "spamfolder") && (defined $spamfolder)){ return $spamfolder; } elsif (($type eq "password") && (defined $passwd)){ return $passwd; } elsif (($type eq "mode") && (defined $mode)){ return $mode; } if ($SysMode){return;} my $tty; my $in; my $dummy = ""; chomp($tty = `stty -g`); if ($type eq "authname") { $prompt = "Login"; } if ($type eq "username") { $prompt = "Login"; } if ($type eq "password") { $prompt = "Passwort"; system "stty -echo -icanon min 1 time 0 2>/dev/null||" . "stty -echo cbreak"; $dummy="\n"; } print "$prompt:"; $in = <STDIN>; chop($in); print $dummy; system "stty $tty"; # Taste fuer Weiter if ($prompt eq ""){ return;} # Leerstring abfangen if ($in eq ""){ undef $in; message($titel,"Fehler: Ungueltige Eingabe!");} if ($type eq "authname") { $user = $in; } if ($type eq "username") { $user = $in; } if ($type eq "spamlevel") { if ($in =~ /\D/){undef $in;} } if ($type eq "spamfolder") { $spamfolder = $in; } if ($type eq "mode"){ if ($in eq "v"){$in="move";} elsif ($in eq "l"){$in="delete";} else{undef $in;} } return $in; } ########################## # zeichnet die Startseite ########################## sub showlogin { print $cgi->header(-expires=>'now'); print $cgi->start_html($titel); print $Header,,$cgi->h1($titel); print $cgi->h3($head),,'<p>',$intro1,'</p>','<p>',$intro2,'(<a href=\'',$link,'\' target=_blank>Anleitung</a>)','</p>', '<p style="color:red">',$hinweis,'</p>','<hr>', '<p>',$info,'</p>', $cgi->startform($method,$action,$encoding), '<table> <tr><td> <table> <tr> <td align="right"><strong>Login:</strong></td> <td>',$cgi->textfield(-name=>'login',-default=>$user,-override=>1,-size=>10,-maxlength=>10),'</td> </tr> <tr> <td align="right"><strong>Passwort:</strong></td> <td>',$cgi->password_field(-name=>'passwd',-default=>$passwd,-size=>10,-maxlength=>20),'</td> </tr> <tr> <td align="right"><strong>SPAM-Level:</strong></td> <td>',$cgi->textfield(-name=>'spamlevel',-default=>$spamlevel,-override=>1,-size=>1,-maxlength=>1),'</td> </tr> <tr> <td align="right"><strong>SPAM-Ordner:</strong></td> <td>',$cgi->textfield(-name=>'spamfolder',-default=>$spamfolder,-override=>1,-size=>10,-maxlength=>20),'</td> </tr> </table> </td> <td>', $cgi->radio_group(-name=>$radio,-value=>[EMAIL PROTECTED],-default=>$radio_selected,-linebreak=>'true',-labels=>\%radio_label), '</td> </tr> <tr><td colspan="2"> </td></tr> <tr><td colspan="2" style="color:red">',$hinweis,'</td></tr> <tr><td colspan="2"> </td></tr> <tr> <td align="center">',$cgi->reset(-value=>'Formular zur¸cksetzen'),'</td> <td align="center">',$cgi->submit(-value=>'Formular absenden'),'</td> </tr> </table> </table>', $cgi->endform(),$Footer,$cgi->end_html(); } ################################ # liest Parameter aus Seite aus ################################ sub get_parameter { $user=$cgi->param('login'); # Seitendaten holen $passwd=$cgi->param('passwd'); $spamlevel=$cgi->param('spamlevel'); $spamfolder=$cgi->param('spamfolder'); $mode=$cgi->param('mode'); # Seitendaten holen if ($user eq ""){message($titel,"Fehler: Bitte geben Sie Ihren Benutzernamen an!");exit;} if ($passwd eq ""){message($titel,"Fehler: Bitte geben Sie Ihr Passwort an!");exit;} if ($spamlevel eq ""){message($titel,"Fehler: Bitte setzen Sie den gewuenschten SPAM-Level!");exit;} if ($spamlevel =~ /\D/){message($titel,"Fehler: Setzen Sie einen SPAM-Level von 0 bis 9!");exit;} if ($mode eq "move"){ if ($spamfolder eq ""){message($titel,"Fehler: Bitte geben Sie den SPAM-Ordner an!");exit;} } } ##################### # gibt Meldungen aus ##################### sub message { my($titel,$message)[EMAIL PROTECTED]; if ($SysMode){ # Aufruf als CGI print $cgi->header; print $cgi->start_html($titel); print $Header,,$cgi->h1($titel); print $cgi->h3($head),, '<p>',$message,'</p>', $Footer,$cgi->end_html(); exit; } else{ print "$message\n"; exit; } }
pgpS9G2cw2Ntg.pgp
Description: PGP signature