Skip to content
Snippets Groups Projects
Commit f328b974 authored by rswindell's avatar rswindell
Browse files

Support all the different spamc/spamd commands, plus an extra "process if below

threshold" optional feature (with '-T').
parent 6a67610f
No related branches found
No related tags found
No related merge requests found
// spamc.js
// SpamAssasin client for Synchronet
// For use as mailproc.ini script to check messages with spamd
// For use as mailproc.ini script to check messages against a running/listening spamd
// Example mailproc.ini entries:
// [spamc.js -c]
// $Id$
load('sockdefs.js');
load('salib.js');
var spamd_address = '127.0.0.1';
var spamd_tcp_port = 783;
function main()
{
var address = '127.0.0.1';
var tcp_port = 783;
var user;
var cmd = 'PROCESS'; // Default: process
var threshold;
// Process arguments:
for(i in argv) {
if(argv[i]=='-d' || argv[i]=='--dest')
spamd_address = argv[++i];
if(argv[i]=='-d' || argv[i]=='--dest')
address = argv[++i]; // Note: only one address supported (unlike spamc)
else if(argv[i]=='-p' || argv[i]=='--port')
spamd_tcp_port = Number(argv[++i]);
tcp_port = Number(argv[++i]);
else if(argv[i]=='-u' || argv[i]=='--username')
user = argv[++i];
else if(argv[i]=='-T' || argv[i]=='--threshold')
threshold = parseFloat(argv[++i]);
else if(argv[i]=='-c' || argv[i]=='--check')
cmd = 'CHECK';
else if(argv[i]=='-y' || argv[i]=='--tests')
cmd = 'SYMBOLS';
else if(argv[i]=='-R' || argv[i]=='--full')
cmd = 'REPORT';
else if(argv[i]=='-r' || argv[i]=='--fullspam')
cmd = 'REPORT_IFSPAM';
}
var msg=new SPAMC_Message(message_text_filename, spamd_address, spamd_tcp_port);
var msg=new SPAMC_Message(message_text_filename, address, tcp_port, user);
if(msg === false)
return;
var ret=msg.check();
msg.debug=true;
log(LOG_INFO, "spamc: Executing command: " + cmd);
var ret=msg.DoCommand(cmd);
if(ret === false)
return;
if(ret.score!=undefined) {
log(LOG_INFO, "spamc: Score: " + ret.score + ' / ' + ret.threshold);
if(threshold && ret.score < threshold)
var ret=msg.DoCommand(cmd='PROCESS');
}
if(cmd == 'PROCESS') {
var msg_file = new File(message_text_filename);
if(!msg_file.open("w")) {
log(LOG_ERR,format("spamc: !ERROR %d opening message text file: %s"
,msg_file.error, message_text_filename));
return;
}
msg_file.write(ret.message);
msg_file.close();
return;
}
if(!ret.isSpam)
return;
var error_file = new File(processing_error_filename);
......@@ -35,7 +72,8 @@ function main()
,error_file.error, processing_error_filename));
return;
}
error_file.writeln("SpamAssassin rejected your mail: " + ret.score + ' / ' + ret.threshold);
error_file.writeln("SpamAssassin rejected your mail: " + ret.score + ' / ' + ret.threshold
+ ' ' + ret.symbols);
error_file.close();
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment