2010-06-26 8 views
0

Je veux utiliser Spam-Assassin pour marquer les mails pour spam avant de les envoyer aux utilisateurs. J'utilise PHP pour l'exécuter en tant que processus en utilisant le exec.Spam Assassin donnant une sortie invalide

exec("/usr/bin/spamc -R < {$fname}",$score,$rr); 

Le problème est que le résultat étant retourné est toujours 0/0. J'ai pris le code PHP du site PHP Classes. Le message de démonstration utilisé est inférieure

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
<head> 
<title>free free</title> 
<meta content="false" http-equiv="imagetoolbar"> 
<meta content="text/html; charset=utf-8" http-equiv="Content-Type"> 
</head> 
<body> 
viagra test test free free 
</center></body></html> 

S'il vous plaît suggérer ce qui pourrait être le problème

+0

Utilisez-vous un chemin de fichier complet pour $ fname? –

+0

oui .. '$ fname = tempnam ("/tmp "," sa ");' – Sam

+0

Si j'utilise le même script sur les autres sites, le fonctionnement est correct. Cela devrait être un problème de configuration Spam Assassin. Quelqu'un pourrait suggérer quelle est la configuration nécessaire à faire à partir de zéro? – Sam

Répondre

0

Essayez de changer la façon dont vous conduit dans le contenu électronique à l'aide proc_open au lieu de exec:

$email_content = "Put your email content here." 

$descriptorspec = array(
    0 => array("pipe", "r"), // stdin read by child 
    1 => array("pipe", "w"), // stdout written to by child 
    2 => array("file", "/tmp/spamd-error-output.txt", "a") // stderr 
); 

$process = proc_open("/usr/bin/spamc -R", $descriptorspec, $pipes); 

if (is_resource($process)) { 
    fwrite($pipes[0], $email_content); 
    fclose($pipes[0]); 
    $full_output = fgets($pipes[1], 1024); 
}