Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]5641[/thread]

Spam abfangen..: ...funktioniert nicht so ganz..



<< >> 7 Einträge, 1 Seite
steinwolf
 2003-08-21 19:07
#72238 #72238
User since
2003-08-04
367 Artikel
BenutzerIn
[default_avatar]
Hi,
erstmal der Code:
Code: (dl )
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
"Did you know? You can use your old motor oil to fertilize your lawn." - Blinkster - Professionelles EDV Forum
Crian
 2003-08-21 19:15
#72239 #72239
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
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
Relais
 2003-08-21 19:22
#72240 #72240
User since
2003-08-06
2244 Artikel
ModeratorIn
[Homepage] [default_avatar]
Zwei Ideen dazu...

Code (perl): (dl )
chomp( my @badwords = <BADWORDS> );


der störenden Zeilenumbrüche wegen.

Code (perl): (dl )
foreach my &#36msgnr ( reverse sort {&#36a<=>&#36b} keys %{&#36phash})


der ansonsten fälschlich gelöschten (weil neu nummerierten Nachrichten wegen.
Erst denken, dann posten --
26. Deutscher Perl- u. Raku -Workshop 15. bis 17.04.2024 in Frankfurt/M.

Winter is Coming
steinwolf
 2003-08-21 19:27
#72241 #72241
User since
2003-08-04
367 Artikel
BenutzerIn
[default_avatar]
hmmm..jau, das sieht nach was aus..danke..ich werds mal ausprobieren..
"Did you know? You can use your old motor oil to fertilize your lawn." - Blinkster - Professionelles EDV Forum
steinwolf
 2003-08-21 19:38
#72242 #72242
User since
2003-08-04
367 Artikel
BenutzerIn
[default_avatar]
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??
"Did you know? You can use your old motor oil to fertilize your lawn." - Blinkster - Professionelles EDV Forum
esskar
 2003-08-21 20:33
#72243 #72243
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
Code (perl): (dl )
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 &#36!;
@badwords = <BADWORDS>;
close(BADWORDS);

print "Try login..\n";
my &#36pop3 = Net::POP3->new('pop.gmx.net', Timeout => 60);
&#36pop3->login('blablubb@gmx.de', 'passwort');
print "Logged in..\n";
print "Check Mails..\n";
my &#36phash = &#36pop3->list();

foreach my &#36msgnr (keys %{&#36phash}) 
{
    my &#36msg = &#36pop3->get(&#36msgnr);
    my &#36next = 0;
    foreach my &#36line (@{ &#36msg }) 
    {
        foreach(@badwords)
        {
            if(&#36line =~ /&#36_/si)
            {
                print "DELETE Mail Nr. &#36msgnr..\n";
                &#36pop3->delete(&#36msgnr);
                &#36next = 1;
                last;
            }
            else {}
        }
        last if &#36next;
    }
}
&#36pop3->quit();

print "Ready..";
\n\n

<!--EDIT|esskar|1061498940-->
esskar
 2003-08-21 20:39
#72244 #72244
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
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!
<< >> 7 Einträge, 1 Seite



View all threads created 2003-08-21 19:07.