User since
2003-08-04
367
Artikel
BenutzerIn
Hi,
erstmal der Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
use Net::Pop3;
open(BADWORDS, "E:/Dokumente/Windows_Scripting/badwords.txt") || die $!;
while(<BADWORDS>)
{
push @badwords, $_;
}
close(BADWORDS);
print "Try login..\n";
my $pop3 = Net::POP3->new('pop.gmx.net', Timeout => 60);
$pop3->login('blablubb@gmx.de', 'passwort');
print "Logged in..\n";
print "Check Mails..\n";
my $phash = $pop3->list();
foreach my $msgnr (keys %{$phash})
{
my $msg = $pop3->get($msgnr);
foreach my $line (@{ $msg })
{
foreach(@badwords)
{
if($line =~/$_/si)
{
print "DELETE Mail Nr. $msgnr..\n";
$pop3->delete($msgnr);
}
else {}
}
}
}
$pop3->quit();
print "Ready..";
sooo..der code ist syntaktisch soweit ich weiß korrekt..
allerdings scheint was mit dem regulären Ausdruck nicht zu stimmen..
in meiner liste badwords.txt steht zum beispiel das wort "fetish", steht in einer mail jedoch "
http://super-fuck-fetischblablubb/" wird das wort nicht erkannt..
mfg
steinwolf
User since
2003-08-04
5872
Artikel
ModeratorIn
Hast Du in den Badwords Zeichen, die in RE's eine geschützte Bedeutung haben? Dann schreib lieber
$line =~ /\Q$_\E/si. Wozu das s? Hast Du mehrzeilige Badwords?
Edit: Außerdem: siehe Signatur!\n\n
<!--EDIT|Crian|1061479027-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;
use strict; use warnings; Link zu meiner Perlseite
User since
2003-08-06
2246
Artikel
ModeratorIn
Zwei Ideen dazu...
chomp( my @badwords = <BADWORDS> );
der störenden Zeilenumbrüche wegen.
der ansonsten fälschlich gelöschten (weil neu nummerierten Nachrichten wegen.
User since
2003-08-04
367
Artikel
BenutzerIn
hmmm..jau, das sieht nach was aus..danke..ich werds mal ausprobieren..
User since
2003-08-04
367
Artikel
BenutzerIn
ok, funzt, sieht zwar nich schön aus *gg*, aber funzt!
Aber, jedes Mal, wenn ich ein badword gefunden habe, wird automatisch nach den restlichen badwords weitergesucht..kann ich die schleife nicht unterbrechen und mit dem nächsten mail fortsetzen??
User since
2003-08-04
7321
Artikel
ModeratorIn
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
use Net::Pop3;
open(BADWORDS, "E:/Dokumente/Windows_Scripting/badwords.txt") || die &
@badwords = <BADWORDS>;
close(BADWORDS);
print "Try login..\n";
my &
&
print "Logged in..\n";
print "Check Mails..\n";
my &
foreach my &
{
my &
my &
foreach my &
{
foreach(@badwords)
{
if(&
{
print "DELETE Mail Nr. $msgnr..\n";
&
&
last;
}
else {}
}
last if &
}
}
&
print "Ready..";
\n\n
<!--EDIT|esskar|1061498940-->
User since
2003-08-04
7321
Artikel
ModeratorIn
hast du dir mal das Modul Mail::Classifier angeschaut?
Ist irgendwie besser als deine Methode!
Mein Antispamer baut ebenfalls auf diesem Modul auf...
leider musste ich viel ändern,
- da Mail::Box::* so schwer unter Win32 zu installieren ist
- ich Mail::Box::* nicht nutzen kann, weil ich das Active Directory von Exchange 2000 nutze, um über die MailBoxen zu laufen.
Ich musste es also für meine Zwecke abändern. Ich benutze jetzt eine MySQL Datenbank, um mir die Wörter zu speichern, und nicht wie das eigentliche Modul MLDBM::Sync und MLDBM qw(MLDBM::Sync::SDBM_File Storable)
Sobald ich das Ding komplett fertig hab, werde ich es wohl unter GPL veröffentlichen!