# -*- mode: python; -*- import subprocess processor.maildir_base = "~/Maildir" processor.auto_reload_rcfile = True def is_to_or_from(mail,address): """ Return true if [mail] is to or from an address that contains [address]. """ return ( mail["From"].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) 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 ( False or mail["List-Id"].matches("bug-gsrc\.gnu\.org") or mail["Subject"].contains("bug-gsrc") ): 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 if mail["List-Id"].matches("help-grub.gnu.org"): mail.move(".software.help-grub") return if mail["List-Id"].matches("maintenance.lists.parabolagnulinux.org"): mail.move(".software.parabola-maintenance") return if ( False or mail["List-Id"].matches("parabolagnulinux.org") or is_to_or_from(mail, "parabolagnulinux.org") or is_to_or_from(mail, "parabola.nu") ): mail.move(".software.parabola-dev") return # Sort email 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 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") 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") ): 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", "@precisepath.com", "@usfirst.org", "gamefreak207@gmail.com", # Brett Leedy "tswilson4801@att.net", "justicejade10@aol.com", "silioso@gmail.com", "cdewalt3@yahoo.com", "bryanbonahoom@gmail.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", "kde.org", "trustees@core3.amsl.com", "esr@thyrsus.com", "canonical.org", "foocorp.net", "cnuk.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 [ "nintendo.com", "nintendo-news.com", ]: if mail["From"].contains(address): mail.move(".Nintendo") return for address in [ "@lpi.org", "@pearson.com", "CompTIA", ]: if mail["From"].contains(address): mail.move(".CompTIA") return if is_to_or_from(mail, "@lnnorthstar.org"): mail.move(".School.Newspaper") return if is_to_or_from(mail,"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 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 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)