J'utilise le code suivant pour générer un rapport de spam en utilisant SpamAssassin:Comment puis-je obtenir un objet Mail :: SpamAssassin :: MailMessage complet à partir du texte?
use Mail::SpamAssassin;
my $sa = Mail::SpamAssassin->new();
open FILE, "<", "mail.txt";
my @lines = <FILE>;
my $mail = $sa->parse(@lines);
my $status = $sa->check($mail);
my $report = $status->get_report();
$report =~ s/\n/\n<br>/g;
print "<h1>Spam Report</h1>";
print $report;
$status->finish();
$mail->finish();
$sa->finish();
Le problème, c'est qu'il classe 'échantillon nonspam.txt' comme spam:
Content preview: [...]
Content analysis details: (6.9 points, 5.0 required)
pts rule name description
---- ---------------------- --------------------------------------------------
-0.0 NO_RELAYS Informational: message was not relayed via SMTP
1.2 MISSING_HEADERS Missing To: header
0.1 MISSING_MID Missing Message-Id: header
1.8 MISSING_SUBJECT Missing Subject: header
2.3 EMPTY_MESSAGE Message appears to have no textual parts and no
Subject: text
-0.0 NO_RECEIVED Informational: message has no Received headers
1.4 MISSING_DATE Missing Date: header
0.0 NO_HEADERS_MESSAGE Message appears to be missing most RFC-822 headers
Et cette information -is- dans le fichier. Ce qui m'inquiète, c'est que dans la documentation, il est écrit "Parse retournera un objet Mail :: SpamAssassin :: Message avec juste les en-têtes analysés". Est-ce que cela signifie qu'il ne retournera pas un message complet?
La ligne mise en surbrillance est sur le point d'entrée * *, la ligne I surligné était sur le point * sortie *. La façon de le faire est légèrement différente. –
@Matthias Peut-être que j'aurais dû le souligner dans ma réponse, mais j'ai été capable de reproduire le problème que vous voyiez et de le corriger (* *, avec un bon rapport qui ne se plaignait pas de champs d'en-tête manquants) * référence à * @lines plutôt @lines. –
Je pense que nos deux réponses sont possibles, mais vous avez répondu à ma question directe, donc je l'accepte. Je vous remercie! –