summaryrefslogtreecommitdiff
path: root/.config/maildirproc/att.rc
diff options
context:
space:
mode:
Diffstat (limited to '.config/maildirproc/att.rc')
-rw-r--r--.config/maildirproc/att.rc369
1 files changed, 369 insertions, 0 deletions
diff --git a/.config/maildirproc/att.rc b/.config/maildirproc/att.rc
new file mode 100644
index 0000000..2bfc002
--- /dev/null
+++ b/.config/maildirproc/att.rc
@@ -0,0 +1,369 @@
+# -*- mode: python; -*-
+
+import os
+import subprocess
+
+processor.maildir_base = "~/Maildir"
+processor.auto_reload_rcfile = True
+processor.logfile = os.getenv('XDG_CACHE_HOME', "~/.cache")+"/maildirproc/att.log"
+
+def is_to_or_from(mail,address):
+ """
+ Return true if [mail] is to or from an address that contains [address].
+ """
+ return (
+ False
+ or mail["From"].contains(address)
+ or mail["Reply-To"].contains(address)
+ or mail.target.contains(address))
+def is_to_or_from_re(mail,address):
+ """
+ Return true if [mail] is to or from an address that matches the
+ regex [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)
+ handle_incoming_ham(mail)
+
+def handle_incoming_ham(mail):
+ my_filters(mail)
+def handle_incoming_spam(mail):
+ mail.move(".Bulk Mail")
+
+def handle_incoming_unknown(mail):
+ # Filter spam
+
+ spam = bogofilter_auto(mail)
+ if spam == 0:
+ handle_incoming_spam(mail)
+ return
+ elif spam == 1:
+ handle_incoming_ham(mail)
+ return
+ elif spam == 2:
+ # maybe spam
+ return
+ else:
+ mail.move(".Error")
+ return
+
+def my_filters(mail):
+ # Sort mail from GNU mailing lists
+ for list in [ 'bug-gsrc', 'bug-make', 'help-make', 'social', 'help-grub', 'bug-gnuzilla' ]:
+ if (
+ False
+ or mail["List-Id"].matches(list+"\.gnu\.org")
+ or mail["Subject"].contains('['+list+']')
+ ):
+ mail.move(".software."+list)
+ return
+
+ # Sort mail from other software mailing lists
+ if (
+ False
+ or mail["List-Id"].matches("social-discuss\.gnu\.org")
+ or mail["Subject"].contains("social-discuss")
+ ):
+ mail.move(".software.social")
+ return
+
+ if mail["List-Id"].matches("networkmanager-list\.gnome\.org"):
+ mail.move(".software.networkmanager")
+ return
+
+ if mail["List-Id"].matches("maintenance.lists.parabolagnulinux.org"):
+ mail.move(".software.parabola-maintenance")
+ return
+
+
+ if is_to_or_from(mail, "parabola.nu"):
+ mail.move(".software.parabola-labs")
+ return
+
+ if (
+ False
+ or mail["List-Id"].matches("parabolagnulinux.org")
+ or is_to_or_from(mail, "parabolagnulinux.org")
+ or is_to_or_from(mail, "kiwwwi.com.ar")
+ ):
+ mail.move(".software.parabola-dev")
+ return
+
+ if (mail["List-Id"].matches("pacman-dev.archlinux.org")):
+ mail.move(".software.pacman-dev")
+ return
+
+ for subject_re in [
+ "\[Stow-[^\]]*\].*",
+ ]:
+ if mail["Subject"].matches(subject_re):
+ mail.move(".software")
+ return
+
+ # Sort mail from some social websites
+ if mail["From"].matches("facebook(|mail)\.com"):
+ mail.move(".Social.Facebook")
+ return
+
+ if (
+ False
+ or mail["From"].matches("identi\.ca")
+ or mail["From"].matches("statusnet")
+ ):
+ 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 mail 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")
+ 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")
+ or is_to_or_from(mail,"oa_wap@yahoo.com")
+ or is_to_or_from(mail,"mytroop.us")
+ ):
+ mail.move(".Troop276")
+ return
+
+ # Sort mail from misc people
+ if mail["From"].matches("margieshu@sbcglobal\.net"):
+ mail.move(".misc.Mom")
+ return
+
+ for address in [
+ "justicejade10@aol.com",
+ "parsonsjade@aol.com",
+ "parsonstjade@gmail.com",
+ "jadparso@umail.iu.edu",
+ ]:
+ if is_to_or_from(mail,address):
+ mail.move(".misc.Jade")
+ return
+
+ for address in [
+ "nintendo.com",
+ "nintendo-news.com",
+ ]:
+ if mail["From"].contains(address):
+ mail.move(".misc.Nintendo")
+ return
+
+ for address in [
+ "@lpi.org",
+ "@pearson.com",
+ "CompTIA",
+ ]:
+ if mail["From"].contains(address):
+ mail.move(".misc.CompTIA")
+ return
+
+ # Sort mail from FRC people
+ for address in [
+ "@ni.com",
+ "@usfirst.org",
+ "BBonahoom@stanleyworks.com",
+ "allison.m.babcock@gmail.com",
+ "bryanbonahoom@gmail.com",
+ "cdewalt3@yahoo.com",
+ "dave.nelson@ecolab.com",
+ "dickaustin190@yahoo.com",
+ "djnels1@comcast.net", # Dave and Julie Nelson
+ "gamefreak207@gmail.com", # Brett Leedy
+ "jason.zielke@gmail.com",
+ "jeffreysmith@msdlt.k12.in.us",
+ "sarahlittell@comcast.net",
+ "silioso@gmail.com",
+ "skiplittell@comcast.net",
+ "tswilson4801@att.net",
+ "wcxctrack829@aim.com", # Pat
+ "william.walk@gmail.com",
+ ]:
+ if is_to_or_from(mail,address):
+ mail.move(".School.Robotics")
+ return
+ for subject_re in [
+ "FIRST",
+ "robotics",
+ "1024",
+ "kil-?a-?bytes",
+ ]:
+ if mail["Subject"].matches(subject_re):
+ mail.move(".School.Robotics")
+ return
+
+ # Sort mail from software people
+ for address in [
+ "gnu.org",
+ "gnome.org",
+ "eff.org",
+ "gitorious.org",
+ "sourceforge.com",
+ "ietf.org",
+ "kde.org",
+ "trustees@core3.amsl.com",
+ "esr@thyrsus.com",
+ "canonical.org",
+ "foocorp.net",
+ "cnuk.org",
+ "@archlinux.org",
+ "@github.com",
+ ]:
+ if is_to_or_from(mail,address):
+ mail.move(".software")
+ return
+
+
+ # Sort mail from the school newspaper
+ if (
+ False
+ or is_to_or_from(mail, "@lnnorthstar.org")
+ or is_to_or_from(mail, "lnnorthstar.org@tigertech.net")
+ ):
+ mail.move(".School.Newspaper")
+ return
+
+ # Sort mail from various employers/people who pay me
+ if is_to_or_from(mail, "@precisepath.com"):
+ mail.move(".Work.PrecisePath")
+ return
+
+ if is_to_or_from(mail,"susyphil@aol.com"):
+ mail.move(".Work.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")
+ or mail["From"].contains("info@demandprogress.org")
+ ):
+ mail.move(".misc.Newsletters")
+ return
+
+ if (
+ False
+ or mail["From"].contains("@msdlt.k12.in.us")
+ or mail["From"].contains("naviance.com")
+ 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
+
+ mail.move(".Ham")
+
+handle_mapping = {
+ ".": 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)