summaryrefslogtreecommitdiff
path: root/email_gateway.py
diff options
context:
space:
mode:
Diffstat (limited to 'email_gateway.py')
-rwxr-xr-xemail_gateway.py24
1 files changed, 23 insertions, 1 deletions
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
6import urlparse 6import urlparse
7from cStringIO import StringIO 7from cStringIO import StringIO
8from email.mime.text import MIMEText 8from email.mime.text import MIMEText
9from ConfigParser import SafeConfigParser as ConfigParser, NoSectionError 9from ConfigParser import SafeConfigParser as ConfigParser, \
10 NoSectionError, NoOptionError
11from spambayes.storage import PickledClassifier
10 12
11 13
12config = ConfigParser() 14config = ConfigParser()
@@ -26,6 +28,18 @@ def send_message(text, subject, to, from_email):
26 p.close() 28 p.close()
27 29
28 30
31def looks_like_spam(message, config, section):
32 pickle_filename = config.get(section, 'spam.pickle_file')
33 min_spam_prob = config.getfloat(section, 'spam.min_spam_prob')
34
35 bayes = PickledClassifier(pickle_filename)
36
37 if bayes.chi2_spamprob(message) >= min_spam_prob:
38 return True
39
40 return False
41
42
29def email_app(environ, start_response): 43def email_app(environ, start_response):
30 ignored_fields = [] 44 ignored_fields = []
31 useful_fields = [] 45 useful_fields = []
@@ -60,6 +74,14 @@ def email_app(environ, start_response):
60 start_response('403 Forbidden', [('Content-Type', 'text/plain')]) 74 start_response('403 Forbidden', [('Content-Type', 'text/plain')])
61 return "Invalid send!" 75 return "Invalid send!"
62 76
77 try:
78 if config.getboolean(form_key, 'spam.check') \
79 and looks_like_spam(context["message"], config, form_key):
80 start_response('403 Forbidden', [('Content-Type', 'text/plain')])
81 return "I don't like SPAM!"
82 except NoOptionError:
83 pass
84
63 useful_fields = ["{0}: {1}".format(*f) 85 useful_fields = ["{0}: {1}".format(*f)
64 for f in useful_fields 86 for f in useful_fields
65 if f[0] not in ignored_fields] 87 if f[0] not in ignored_fields]