From 775be2a87ad8a744548d1a1d0ae87a7e665ca10e Mon Sep 17 00:00:00 2001 From: Mike Pirnat Date: Wed, 8 Aug 2012 23:03:36 -0400 Subject: Adds rudimentary spam check --- email_gateway.py | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/email_gateway.py b/email_gateway.py index e73e3e2..fe58fad 100755 --- a/email_gateway.py +++ b/email_gateway.py @@ -6,7 +6,9 @@ import re import urlparse from cStringIO import StringIO from email.mime.text import MIMEText -from ConfigParser import SafeConfigParser as ConfigParser, NoSectionError +from ConfigParser import SafeConfigParser as ConfigParser, \ + NoSectionError, NoOptionError +from spambayes.storage import PickledClassifier config = ConfigParser() @@ -26,6 +28,18 @@ def send_message(text, subject, to, from_email): p.close() +def looks_like_spam(message, config, section): + pickle_filename = config.get(section, 'spam.pickle_file') + min_spam_prob = config.getfloat(section, 'spam.min_spam_prob') + + bayes = PickledClassifier(pickle_filename) + + if bayes.chi2_spamprob(message) >= min_spam_prob: + return True + + return False + + def email_app(environ, start_response): ignored_fields = [] useful_fields = [] @@ -60,6 +74,14 @@ def email_app(environ, start_response): start_response('403 Forbidden', [('Content-Type', 'text/plain')]) return "Invalid send!" + try: + if config.getboolean(form_key, 'spam.check') \ + and looks_like_spam(context["message"], config, form_key): + start_response('403 Forbidden', [('Content-Type', 'text/plain')]) + return "I don't like SPAM!" + except NoOptionError: + pass + useful_fields = ["{0}: {1}".format(*f) for f in useful_fields if f[0] not in ignored_fields] -- cgit v1.2.3