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

Mails mit SpamAssassin klassifizieren - Ansatz



<< >> 7 Einträge, 1 Seite
larsemann
 2008-05-15 20:16
#109751 #109751
User since
2008-05-15
20 Artikel
BenutzerIn
[default_avatar]
Hallo Zusammen,
ich postete einen ähnlichen Beitrag bereits in einem anderen Forum, und beschloss mich nun auch hier anzumelden um eventuell Hilfe zu bekommen.

ich habe vor einigen Monaten bereits ein PHP-Script zur Auslese und Speicherung der jeweils aktuellesten E-Mails geschrieben, dies vor kurzem in PERL übertragen, da ich SpamAssassin zur Klassifizierung der E-Mails benötige.

Jetzt will ich SpamAssasssin benutzen/einbauen, habe es erfolgreich per CPAN geladen und installiert, aber wenn ich ein Spamassassin:Mail-Object per SpamAssassin:check() oder nur einen Text per SpamAssassin::check_message_text() zum Testen filtern will, bricht das Script bei der Ausführung ohne jegliche Fehlermeldung ab.

Es gibt keine syntaktischen Fehler und ich experimentiere aktuell mit einer DB, gefüllt mit diversen ham/spam Texten.

Ein kleiner Ausschnitt, wie ich mir das gedacht habe, aber es wie gesagt nicht geht, weil wegen weiss ich nicht.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
my ($mail, $status, $new_status, $spam);

while(my ($mail_id, $mail_body) = $sth->fetchrow_array ) {
$mail_body = qq{$mail_body}; ## $mail_body = text inhalt ohne html
$mail = $spamtest->parse($mail_body);
$status = $spamtest->check($mail);

if ( $status->is_spam() ) {
$new_status = 1;
print 'spam';
} else {
$new_status = 0;
print 'kein spam';
}

}

Die Ausgabe der $mailId klappt nur, wenn ich sämtliche SA-Methoden kommentiere.

Für einen Denkanstoß oder eine Idee bin ich in jedem Fall dankbar!
moritz
 2008-05-15 23:25
#109757 #109757
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
Also der erste Syntaxfehler ist schon in der ersten Zeile, das sollte $is_status und nicht is_status heissen.
larsemann
 2008-05-15 23:32
#109758 #109758
User since
2008-05-15
20 Artikel
BenutzerIn
[default_avatar]
Sry, das ist jetzt ein Beispielcode, den ich kurz runtergefrickelt habe.
Den Syntaxfehler gibt es im Script nicht, und es gibt auch keine Fehlermeldung, wenn ich per -wc die Syntax checken lasse.

Es ist nur irgendwie so, dass wenn ich das Script per 'perl script.pl' ausführen lasse, keinerlei Ausgabe mehr stattfindet, oder irgendwie eine Nachricht kommt.
moritz
 2008-05-15 23:41
#109760 #109760
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
Also lässt du uns in fehlerhaft zusammengefrickelten Beispielprogrammen nach Fehlern suchen? Was bringt dir das denn?

Das ist so als ob du ein Auto zu einer Werkstatt karrst und sagst "Mein Auto zuhause springt nicht an, und das hier ist auch kaputt. Schaut euch dieses Auto mal an und sagt mir dann, was mit dem Auto zuhause kaputt ist."

Wenn wir dir helfen sollen, dann musst du uns schon das Programm zeigen, das nicht funktioniert.
larsemann
 2008-05-15 23:51
#109761 #109761
User since
2008-05-15
20 Artikel
BenutzerIn
[default_avatar]
Ne, das wollte ich nicht. Ich habe nur versucht möglichst komprimiert mein Script reinzustellen, damit man nicht zuviel Quelltext analysieren muss.
Ich bin sehr dankbar überhaupt eine Hilfe zu bekommen.

Ich habe meinen Quelltext jetzt aktualisiert.

Grüße
moritz
 2008-05-15 23:57
#109762 #109762
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
Wenn es überhaupt keine Ausgabe gibt würde ich als erstes direkt in die While-Schleife eine Debuggingausgabe reinmachen - vielleicht kommen ja aus der Datenbank nicht so viele Datensätze wie du es erwartest?

Ausserdem solltest du am Ende des Prints ein Newline ausgeben, weil STDOUT per Default gepuffert ist (Zeilenpuffer).

Sonst fällt mir erst mal kein Fehler auf.
larsemann
 2008-05-16 00:00
#109763 #109763
User since
2008-05-15
20 Artikel
BenutzerIn
[default_avatar]
Hi,
wenn ich vor das $spamtest->parse($mail_body) etwa $mail_id oder $mail_body ausgeben lasse, kommt was raus, und zwar einmal.

Wenn ich $spamtest->egal_welche_methode in der while schleife rauslasse, werden mir alle möglichen Datensätze, die ich abfrage, angezeigt.

Vielleicht muss ich mir nochmal ganz genau die Installationshinweise etc. geben.

Ach verdammt, nach /usr/bin/spamassassin --lint bekam ich "hundertausend" Zeilen Fehler.

Es ist wohl kein Perl-Problem was ich da habe, sry für die Unannehmlichkeiten.
Aber wenn jemand weiss, wie ich

[27303] warn: plugin: failed to parse plugin (from @INC): Bareword "Mail::SpamAssassin::Constants::CHARSETS_LIKELY_TO_FP_AS_CAPS" not allowed while "strict subs" in use at /usr/local/share/perl/5.8.8/Mail/SpamAssassin/Plugin/HeaderEval.pm line 967.

fixe, einfach melden ;)

Diverse Schnellsuchen haben jetzt auch nicht viel ergeben.

<< >> 7 Einträge, 1 Seite



View all threads created 2008-05-15 20:16.