Nach einem Posting von <tmohr AT s.netic.de>:
Der Autor verwendet fetchmail
- welche Änderungen sind für KPPP - mozilla-mail notwendig
- wie wird das Script eingebunden
KPPP bietet den Schalter "Ausführen nach Login..."
- wo stecken die Filter
Gewünscht wären:
- alles killen was nicht über den FWD xy.com reinkommt
- Kill Betreff = abc, Microsoft, sex....
use Mail::POP3Client;
use Tk;
$user = "tmohr+s.netic.de";
$pass = "";
$host = "mail.s.netic.de";
$port = 110;
$debug = 0;
$time = 20;
$annoy_size = 100000;
$fetchmail = "/usr/bin/fetchmail";
$zsatz = "-adobe-courier-medium-r-normal--12-100-100-100-m-90-iso8859-1";
$width = 80;
$subj_text = "Subject: ";
$from_text = "From: ";
$to_text = "To: ";
$date_text = "Date: ";
$size_text = "Size: ";
$subj_no = "No Subject line";
$from_no = "No From line";
$to_no = "No To line";
$date_no = "No Date line";
$size_no = "No Size ?!?";
$connected = 0;
$old_id = -1;
$subj_label = $subj_text;
$from_label = $from_text;
$to_label = $to_text;
$date_label = $date_text;
$size_label = $size_text;
$mw = MainWindow->new();
$mw->title("Kill incoming mail");
$up = $mw->Frame();
$dn = $mw->Frame();
$info = $mw->Frame();
$pw_label = $up->Label(-text => "Password:");
$pw_label->pack(-side => "left", -fill => "x", -expand => "yes");
$pw_entry = $up->Entry(-show => '*', -width => 16, -font => $zsatz,
-textvariable => \$pass, -takefocus => 1);
$pw_entry->pack(-side => "left", -fill => "x", -expand => "yes");
$pw_entry->focus();
$up->pack(-side => "top", -anchor => "w");
$read_bn = $dn->Button(-text => "Look up", -command => \&readmsg_in);
$read_bn->pack(-side => "left", -fill => "x", -expand => "yes");
$kill_bn = $dn->Button(-text => "Kill", -command => \&delete_msg);
$kill_bn->pack(-side => "left", -fill => "x", -expand => "yes");
$go_bn = $dn->Button(-text => "Fetch", -command => \&go);
$go_bn->pack(-side => "left", -fill => "x", -expand => "yes");
$quit_bn = $dn->Button(-text => "Quit", -command => \&ex );
$quit_bn->pack(-side => "left", -fill => "x", -expand => "yes");
#$debug_bn = $dn->Button( -text => "Debug", -command => \&dbg);
#$debug_bn->pack(-side => "left", -fill => "x", -expand => "yes");
$dn->pack(-side => "bottom", -fill => "x", -expand => "no");
$subj_lb = $info->Label(-textvariable => \$subj_label, -font => $zsatz);
$subj_lb->pack(-side => "top", -anchor => "w");
$from_lb = $info->Label(-textvariable => \$from_label, -font => $zsatz);
$from_lb->pack(-side => "top", -anchor => "w");
$to_lb = $info->Label(-textvariable => \$to_label, -font => $zsatz);
$to_lb->pack(-side => "top", -anchor => "w");
$date_lb = $info->Label(-textvariable => \$date_label, -font => $zsatz);
$date_lb->pack(-side => "top", -anchor => "w");
$size_lb = $info->Label(-textvariable => \$size_label, -font => $zsatz);
$size_lb->pack(-side => "top", -anchor => "w");
$info->pack(-side => "bottom", -anchor => "w");
$lb = $mw->Listbox(-selectmode => "multiple",
-font => $zsatz,
-selectforeground => "red",
-selectbackground => "grey90");
$lb->pack(-side => "left", -fill => "both", -expand => "yes");
$sc = $mw->Scrollbar();
$sc->pack(-side => "right", -fill => "y");
$sc->configure(-command => ['yview', $lb]);
$lb->configure(-width => $width, # -height => $height,
-yscrollcommand => ['set', $sc]);
$lb->bind("<Motion>", [ \&motion, Ev("y") ]);
BindMouseWheel($lb);
MainLoop;
sub dnect {
if($connected) {
$pop->Close();
$connected = 0;
}
}
sub cnect {
if(!$connected) {
$pop = new Mail::POP3Client(
USER => $user,
PASSWORD => $pass,
HOST => $host,
PORT => $port,
DEBUG => $debug,
TIMEOUT => $time);
if($pop->Connect()) {
$connected = 1;
print "connected\n";
}
else {
$connected = 0;
print "can't connect :'$pop->Message()'\n";
}
}
}
sub motion {
$id = $lb->nearest($_[1]);
if($old_id != $id) {
$old_id = $id;
$subj_label = $subj_text . $subj[$id];
$from_label = $from_text . $from[$id];
$to_label = $to_text . $to[$id];
$date_label = $date_text . $date[$id];
$size_label = $size_text . $size[$id];
}
}
sub ex {
if($connected) {
$pop->Reset();
}
dnect();
exit;
}
sub delete_msg {
del_msg();
dnect();
cnect();
read_in();
}
sub del_msg {
@list = $lb->curselection();
foreach $i (@list) {
$pop->Delete($i+1);
}
}
sub go {
# del_msg();
dnect();
system($fetchmail);
exit;
}
sub dbg {
print "\n####\n$list\n####\n";
for($i = 0; $i < $n; $i++) {
print "SUBJ: $subj[$i]\n";
print "FROM: $from[$i]\n";
print "TO: $to[$i]\n";
print "DATE: $date[$i]\n";
print "SIZE: $size[$i]\n\n";
}
}
sub readmsg_in {
cnect();
read_in();
}
sub read_in {
$lb->delete(0, 'end');
$n = $pop->Count();
print "$n messages on server\n";
# the list of the sizes of each mail
$list = $pop->List();
for($i = 0; $i < $n; $i++) {
print "\r";
$head[$i] = $pop->Head($i+1);
$tmp = $i+1;
print "read $tmp of $n messages";
}
print "\n";
@sizes = split(/\n/, $list);
foreach $line (@sizes) {
if($line =~ /([0-9]*)[^0-9]+([0-9]*)/) {
$size[$1-1] = $2;
}
}
for($i = 0; $i < $n; $i++) {
# Subjekt
if($head[$i] =~ /$subj_text(.*)/) {
$subj[$i] = $1;
$has_subj = 1;
}
else {
$subj[$i] = $subj_no;
$has_subj = 0;
}
# From
if($head[$i] =~ /$from_text(.*)/) {
$from[$i] = $1;
$has_from = 1;
}
else {
$from[$i] = $from_no;
$has_from = 0;
}
# To
if($head[$i] =~ /$to_text(.*)/) {
$to[$i] = $1;
}
else {
$to[$i] = $to_no;
}
# Date
if($head[$i] =~ /$date_text(.*)/) {
$date[$i] = $1;
}
else {
$date[$i] = $date_no;
}
# Size
if(!defined $size[$i]) {
$size[$i] = $size_no;
$sz = 0;
}
else {
$sz = $size[$i];
}
$subj[$i] =~ s/\n$//;
$from[$i] =~ s/\n$//;
$to[$i] =~ s/\n$//;
$date[$i] =~ s/\n$//;
$size[$i] =~ s/\n$//;
$subj[$i] =~ s/\r$//;
$from[$i] =~ s/\r$//;
$to[$i] =~ s/\r$//;
$date[$i] =~ s/\r$//;
$size[$i] =~ s/\r$//;
$current = sprintf("%10s %-50s %-30s %-30s",
$size[$i],
$subj[$i],
$from[$i],
$date[$i]);
$lb->insert('end', "$current");
if(!$has_subj and !$has_from) {
$lb->selectionSet('end');
}
if(!$has_subj and $sz > $annoy_size) {
$lb->selectionSet('end');
}
if(!$has_from and $sz > $annoy_size) {
$lb->selectionSet('end');
}
}
}
sub BindMouseWheel {
my($w) = @_;
$w->bind('<4>' => sub {
$_[0]->yview('scroll', -3, 'units');
});
$w->bind('<5>' => sub {
$_[0]->yview('scroll', +3, 'units');
});
}