Initial commit
This commit is contained in:
commit
2b85f56c00
2 changed files with 56 additions and 0 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
Spam-Archive
|
55
spam-summary.js
Executable file
55
spam-summary.js
Executable file
|
@ -0,0 +1,55 @@
|
|||
#!/usr/bin/env node
|
||||
|
||||
// Script to present a summary of the $number of least likely spam messages
|
||||
// from the recent spam folder. A good check on the more aggressive
|
||||
// spamassassin configurations
|
||||
|
||||
// Notes:
|
||||
// Totally blocks the event loop for simplicity, would need to be refactored
|
||||
// if it were to be used on massive spam receivers or servers with many users.
|
||||
// Currently designed for periodic use on small personal mail servers.
|
||||
|
||||
// Dependencies
|
||||
var fs = require('fs');
|
||||
var execSync = require('child_process').execSync;
|
||||
|
||||
// Constant definition
|
||||
var spamFolder = "./Spam-Archive/cur/";
|
||||
var sendTo = "amdavidson";
|
||||
|
||||
// Variable definition
|
||||
var emails = new Array();
|
||||
var summary = "";
|
||||
|
||||
|
||||
// Read all emails in specified directory, parse for
|
||||
// date, from, return-path, subject, and spam score.
|
||||
filenames = fs.readdirSync(spamFolder)
|
||||
filenames.forEach(function(filename) {
|
||||
data = fs.readFileSync(spamFolder + filename);
|
||||
email = {};
|
||||
email.fileName = filename;
|
||||
email.from = /From: (.+)/.exec(data)[1];
|
||||
email.returnPath = /Return-Path: (.+)/.exec(data)[1];
|
||||
email.subject = /Subject: (.+)/.exec(data)[1];
|
||||
email.date = /Date: (.*)/.exec(data)[1];
|
||||
email.score = /score=([\-\+]?[0-9]*(\.[0-9]+)?)/.exec(
|
||||
/X-Spam-Status: (.+)/.exec(data)[1])[1];
|
||||
emails.push(email);
|
||||
});
|
||||
|
||||
// Sort by spam socre
|
||||
emails.sort(function (a, b) {
|
||||
return parseFloat(a.score) - parseFloat(b.score)
|
||||
});
|
||||
|
||||
// Construct a summary
|
||||
for (var i=0; i < 25; i++) {
|
||||
summary += i + ": " + emails[i].date + "\n\t" + emails[i].from + "\n\t" +
|
||||
emails[i].subject + "\n\tScore: " + emails[i].score + "\n\n";
|
||||
}
|
||||
summary += "\n\n";
|
||||
|
||||
// Send summary via email
|
||||
var child = execSync("mail -s \"Spam Summary " + new Date().toISOString() +
|
||||
"\" " + sendTo, {input: summary});
|
Loading…
Reference in a new issue