summaryrefslogtreecommitdiff
path: root/.maildirproc
diff options
context:
space:
mode:
Diffstat (limited to '.maildirproc')
-rw-r--r--.maildirproc/default.rc280
1 files changed, 280 insertions, 0 deletions
diff --git a/.maildirproc/default.rc b/.maildirproc/default.rc
new file mode 100644
index 0000000..7d46f57
--- /dev/null
+++ b/.maildirproc/default.rc
@@ -0,0 +1,280 @@
+# -*- mode: python; -*-
+
+import subprocess
+
+processor.maildir_base = "~/Maildir"
+processor.auto_reload_rcfile = True
+
+def is_to_or_from(mail,address):
+ return (
+ mail["From"].contains(address)
+ or mail.target.contains(address))
+def is_to_or_from_re(mail,address):
+ return (
+ mail["From"].matches(address)
+ or mail.target.matches(address))
+
+def bogofilter_auto(mail):
+ p = subprocess.Popen(
+ ["bogofilter", "-u", "-v", "-I", mail.path],
+ stdout=subprocess.PIPE,
+ stderr=subprocess.STDOUT)
+ (output, _) = p.communicate()
+ processor.log("*** Bogofilter result: {0!r}".format(output.rstrip()))
+ if p.returncode not in [0, 1, 2]:
+ processor.log_error(
+ "Error running bogofilter: Return code = {0!r}".format(
+ p.returncode))
+ return p.returncode
+
+def bogofilter_ham(mail):
+ subprocess.call(["bogofilter", "-S", "-n", "-I", mail.path])
+
+def bogofilter_spam(mail):
+ subprocess.call(["bogofilter", "-N", "-s", "-I", mail.path])
+
+def handle_incoming_spam_training(mail):
+ bogofilter_spam(mail)
+ mail.move(".Bulk Mail")
+
+def handle_incoming_ham_training(mail):
+ bogofilter_ham(mail)
+ mail.move(".Ham")
+
+def handle_incoming_ham(mail):
+ my_filters(mail)
+
+def handle_incoming_unknown(mail):
+ # Filter spam
+
+ spam = bogofilter_auto(mail)
+ if spam == 0:
+ mail.move(".Bulk Mail")
+ return
+ elif spam == 1:
+ mail.move(".Ham")
+ return
+ elif spam == 2:
+ # maybe spam
+ my_filters(mail)
+ return
+ else:
+ mail.move(".Error")
+ return
+
+def my_filters(mail):
+ # Sort into software mailing lists
+
+ if mail["List-Id"].matches("bug-gsrc\.gnu\.org"):
+ mail.move(".software.bug-gsrc")
+ return
+
+ if mail["List-Id"].matches("bug-make\.gnu\.org"):
+ mail.move(".software.bug-make")
+ return
+
+ if mail["List-Id"].matches("help-make\.gnu\.org"):
+ mail.move(".software.help-make")
+ return
+
+ if mail["List-Id"].matches("social(|-discuss)\.gnu\.org"):
+ mail.move(".software.social")
+ return
+
+ # Sort email from some social websites
+
+ if mail["From"].matches("@facebook(|mail)\.com"):
+ mail.move(".Social.Facebook")
+ return
+
+ if mail["From"].matches("identi\.ca"):
+ mail.move(".Social.Identica")
+ return
+
+ if mail["From"].matches("twitter\.com"):
+ mail.move(".Social.Twitter")
+ return
+
+ if mail["From"].matches("@xkcd\.com"):
+ mail.move(".Social.xkcd")
+ return
+
+ # Sort email related to Troop 276
+
+ if (
+ False
+ or mail["List-Id"].contains("troopmailinglist.troop276.net")
+ or is_to_or_from(mail,"t276_announcements@att.net")
+ or mail["Subject"].matches("troop\s*276")
+ or mail["Subject"].matches("merit\s*badge")
+ or is_to_or_from(mail,"jsting@sbcglobal.net")
+ or is_to_or_from(mail,"trdindy@comcast.net")
+ or is_to_or_from(mail,"wjensen111@aol.com")
+ or is_to_or_from(mail,"dhoyt@yourhomecompany.com")
+ or is_to_or_from(mail,"salupo_vincent_p@lilly.com")
+ or is_to_or_from(mail,"basu@maharjan.org")
+ or is_to_or_from(mail,"muellerindy@yahoo.com")
+ or is_to_or_from(mail,"solorzano.luis@rocketmail.com")
+ or is_to_or_from(mail,"eldredmac@comcast.net")# MacDonell
+ or is_to_or_from(mail,"mitchprather@sbcglobal.net")
+ ):
+ mail.move(".Troop276")
+ return
+
+ if mail["From"].matches("margieshu@sbcglobal\.net"):
+ mail.move(".misc.Mom")
+ return
+
+ # Sort mail from robotics people
+ for address in [
+ "jeffreysmith@msdlt.k12.in.us",
+ "jason.zielke@gmail.com",
+ "allison.m.babcock@gmail.com",
+ "william.walk@gmail.com",
+ "BBonahoom@stanleyworks.com",
+ "wcxctrack829@aim.com", # Pat
+ "djnels1@comcast.net", # Dave and Julie Nelson
+ "sarahlittell@comcast.net",
+ "skiplittell@comcast.net",
+ "dave.nelson@ecolab.com",
+ "@ni.com",
+ ]:
+ if is_to_or_from(mail,address):
+ mail.move(".School.Robotics")
+ return
+ for subject_re in [
+ "robotics",
+ "1024",
+ "kil-?a-?bytes",
+ ]:
+ if mail["Subject"].matches(subject_re):
+ mail.move(".School.Robotics")
+ return
+
+ # Sort mail from scoftware people
+ for address in [
+ "gnu.org",
+ "gitorious.org",
+ "sourceforge.com",
+ "ietf.org",
+ "trustees@core3.amsl.com",
+ "esr@thyrsus.com",
+ "canonical.org",
+ "foocorp.net",
+ "parabolagnulinux.org"
+ ]:
+ if is_to_or_from(mail,address):
+ mail.move(".software")
+ return
+ for subject_re in [
+ "\[Stow-[^\]]*\].*",
+ ]:
+ if mail["Subject"].matches(subject_re):
+ mail.move(".software")
+ return
+
+ for address in [
+ "@lpi.org",
+ "@pearson.com",
+ "CompTIA",
+ ]:
+ if mail["From"].contains(address):
+ mail.move(".CompTIA")
+ return
+
+ if mail["From"].contains("@lnnorthstar.org"):
+ mail.move(".School.Newspaper")
+ return
+
+ if mail["From"].contains("susyphil@aol.com"):
+ mail.move(".PMCH")
+
+ for address in [
+ "d.farrar@comcast.net",
+ "dfarrar@avacoustics.net",
+ "@vmware.com",
+ ]:
+ if is_to_or_from(mail,address):
+ mail.move(".Work.FAST")
+ return
+
+ # Sort misc newsletters
+
+ if (
+ False
+ or mail["From"].contains("newsletter")
+ or mail["From"].contains("auto@comicsbyemail.com")
+ or mail["From"].contains("oreilly.com")
+ or mail["Subject"].contains("newsletter")
+ or mail["From"].contains("Info@mailing.jamendo.com")
+ ):
+ mail.move(".misc.Newsletters")
+ return
+
+ if (
+ False
+ or mail["From"].contains("@msdlt.k12.in.us")
+ or is_to_or_from(mail,"ibwhite@comcast.net")
+ or mail["Subject"].contains("IOA")
+ or mail["From"].contains("nths.org")
+ or mail["Subject"].contains("NTHS")
+ or mail["Subject"].contains("National Technical Honor Society")
+ or mail["Subject"].contains("NHS")
+ or mail["Subject"].contains("National Honor Society")
+ ):
+ mail.move(".School")
+ return
+
+ # from college stuff
+ if (
+ False
+ or mail["Subject"].contains("NYLF") # National Youth Leadership Conference
+ or mail["Subject"].contains("NSHSS")
+ ):
+ mail.move(".College.Societies")
+ return
+ if (
+ False
+ or mail["From"].contains(".edu")
+ or mail["From"].contains("admissions@")
+ or mail["From"].contains("college")
+ or mail["From"].contains("university")
+ or mail["Subject"].contains("college")
+ # now we get to the BS
+ or mail["From"].contains("@dreamitdoitindiana.com")
+ or mail["From"].contains("@indianatechinfo.org")
+ ):
+ mail.move(".College")
+ return
+
+ if mail["From"].contains("@projectwonderful.com"):
+ mail.move(".ProjectWonderful")
+ return
+
+ if (
+ False
+ or mail["From"].matches("@localhost")
+ or mail["From"].matches("@[^,>]*\.local")
+ or mail["From"].matches("@[^,>]*\.lukeshu\.ath\.cx")
+ or mail["To"].matches("luke@")
+ ):
+ mail.move(".LocalSystems")
+ return
+ if (
+ False
+ or mail["Subject"].contains("password")
+ or mail["Subject"].contains("account")
+ ):
+ mail.move(".misc.accounts")
+ return
+
+handle_mapping = {
+ ".": handle_incoming_unknown,
+ ".Inbox": handle_incoming_unknown,
+ ".spam-training": handle_incoming_spam_training,
+ ".ham-training": handle_incoming_ham_training,
+ ".Ham": handle_incoming_ham,
+ }
+processor.maildirs = handle_mapping.keys()
+for mail in processor:
+ handle_mapping[mail.maildir](mail)