# -*- mode: python; indent-tabs-mode: t -*- import os import subprocess processor.maildir_base = "~/Maildir.purdue" 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 piazza_topic(mail, topic): return ( is_to_or_from(mail, topic+" on Piazza") or mail["Subject"].contains(topic+" on Piazza")) def my_filters(mail): # Generic stuff ######################################################## if ( False or mail["Subject"].contains("[PASE]") or is_to_or_from(mail,"Purduealumni@purdue.edu") or is_to_or_from(mail,"pase@purdue.edu") ): mail.move("INBOX.crap.PASE") return if mail["Subject"].contains("[PLUG]"): mail.move("INBOX.crap.PLUG") return if mail["From"].matches(".*bursar.*@purdue\.edu"): mail.move("INBOX.tuition") return if mail["From"].contains("mailhub-admin@purdue.edu"): mail.move("INBOX.crap.mailhub-admin") return if mail["From"].matches("pmx-.*@purdue.edu"): mail.move("INBOX.crap.spam") return if is_to_or_from(mail,"linkedin.com"): mail.move("INBOX.crap.LinkedIn") return if is_to_or_from(mail,"follet.com"): mail.move("INBOX.Follet") return if ( False or is_to_or_from(mail,"@edrtrust.com") or is_to_or_from(mail,"@propertysolutions.com") or is_to_or_from(mail,"collegestationapartments@gmail.com") or is_to_or_from_re(mail,"collegestationca\..*@gmail.com") ): mail.move("INBOX.housing.CollegeStation") return if ( False or is_to_or_from(mail,"@hunterlp.com") or is_to_or_from(mail, "@duke-energy.com") or is_to_or_from(mail, "@alerts.comcast.net") or is_to_or_from(mail, "rentpayment.com") or is_to_or_from(mail, "@vectren.com") ): mail.move("INBOX.housing.BeauJardin") return if mail["From"].matches("facebook(|mail)\.com"): mail.move("INBOX.crap.Facebook") return if is_to_or_from(mail,"@cerias.purdue.edu"): mail.move("INBOX.crap.CERIAS") return if is_to_or_from(mail,"royfu@purdue.edu"): mail.move("INBOX.crap.Hackers") return if ( False or is_to_or_from(mail,"@cable.comcast.com") or is_to_or_from(mail,"@apexsystemsinc.com") ): mail.move("INBOX.work.2013.Comcast") return if ( False or is_to_or_from(mail,"@qualcomm.com") or is_to_or_from(mail,"@Cartus.com") or is_to_or_from(mail,"@quicinc.com") ): mail.move("INBOX.work.2015.qualcomm") return if ( False or mail["Subject"].contains("[CS Opportunity Update]") or mail["Subject"].contains("[CS Majors]") ): mail.move("INBOX.crap.CS") return if (mail["From"].contains("shumakl@cs.purdue.edu") and mail["Subject"].matches("^cron:")): mail.move("INBOX.crap.cron") return # Fall 2012 ############################################################ # SCI210 (Teaming principles) if mail["Subject"].contains("Fall-2012-SCI-21000-001:"): mail.move("INBOX.classes.2012-2.SCI210") # CS180 (Java) if mail["Subject"].contains("fall-2012-cs-18000"): mail.move("INBOX.classes.2012-2.CS180") return if piazza_topic(mail, "CS 18000"): mail.move("INBOX.classes.2012-2.CS180.Piazza") return # SOC100 if mail["Subject"].contains("Fall-2012-SOC-10000"): mail.move("INBOX.classes.2012-2.SOC100") return # Spring 2013 ########################################################## # CS240 (C) if mail["Subject"].contains("[CS240] Submission result for"): mail.move("INBOX.classes.2013-1.CS240.autograder") return if mail["Subject"].contains("[CS240]") or mail["Subject"].contains("Spring-2013-CS-24000"): mail.move("INBOX.classes.2013-1.CS240") return if piazza_topic(mail, "CS 240"): mail.move("INBOX.classes.2013-1.CS240.Piazza") return # PHYS220 if mail["Subject"].matches(".*(PHYS|CHIP)\s*220.*") or is_to_or_from(mail,"srdas@purdue.edu"): mail.move("INBOX.classes.2013-1.PHYS220") return # SOC220 (Social Problems) if mail["Subject"].contains("Spring-2013-SOC-22000"): mail.move("INBOX.classes.2013-1.SOC220") return # Fall 2013 ############################################################ # CS250 (Computer Architecture) if mail["Subject"].contains("Fall-2013-CS-25000"): mail.move("INBOX.classes.2013-2.CS250") return if piazza_topic(mail, "CS 250") or piazza_topic(mail, "CS 250-FALL2013"): mail.move("INBOX.classes.2013-2.CS250.Piazza") return # CS251 (Intro Algo) if mail["Subject"].contains("Fall-2013-CS-25100"): mail.move("INBOX.classes.2013-2.CS251") return if piazza_topic(mail, "CS 251"): mail.move("INBOX.classes.2013-2.CS251.Piazza") return # SPAN101 if mail["Subject"].contains("Fall-2013-SPAN-10100"): mail.move("INBOX.classes.2013-2.SPAN101") return # MA261 (Calc III) if mail["Subject"].contains("Fall-2013-MA-26100"): mail.move("INBOX.classes.2013-2.MA261") return # MA265 (Linear Algebra) if mail["Subject"].contains("Fall-2013-MA-26500"): mail.move("INBOX.classes.2013-2.MA265") return # Spring 2014 ########################################################## # COM217 if mail["Subject"].contains("Spring-2014-COM-21700-004"): mail.move("INBOX.classes.2014-1.COM217") return if mail["From"].contains("mixable") and mail["Subject"].matches("^COM 21700"): mail.move("INBOX.classes.2014-1.COM217.Mixable") return # CS252 (Systems Programming) if piazza_topic(mail, "CS 25200"): mail.move("INBOX.classes.2014-1.CS252.Piazza") return # CS307 (Software Engineering) if is_to_or_from(mail, "dunsmore@purdue.edu") or mail["Subject"].contains("Spring-2014-CS-30700-LE1"): mail.move("INBOX.classes.2014-1.CS307") return # SPAN102 if mail["Subject"].contains("spring-2014-span-102"): mail.move("INBOX.classes.2014-1.SPAN102") return # STAT350 if is_to_or_from(mail, "ssellke@purdue.edu"): mail.move("INBOX.classes.2014-1.STAT350") return if piazza_topic(mail, "STAT 35000 (SELLKE)"): mail.move("INBOX.classes.2014-1.STAT350.Piazza") return # Fall 2014 ############################################################ # CS334 (Graphics) if (is_to_or_from(mail, "lin553@purdue.edu") or mail["Subject"].contains("Fall-2014-CS-33400")): mail.move("INBOX.classes.2014-2.CS334") return # CS354 (OS) if piazza_topic(mail, "CS 354"): mail.move("INBOX.classes.2014-2.CS354.Piazza") return # CS381 (Algo) if piazza_topic(mail, "CS 381"): mail.move("INBOX.classes.2014-2.CS381.Piazza") return # CS456 (Programming languages) if piazza_topic(mail, "CS 456"): mail.move("INBOX.classes.2014-2.CS456.Piazza") return # MA416 if mail["Subject"].contains("Fall-2014-MA-41600"): mail.move("INBOX.classes.2014-2.MA416") return # PHYS221 if (False or is_to_or_from(mail, "cui@purdue.edu") or is_to_or_from(mail, "shina@purdue.edu") or is_to_or_from(mail, "ajith@purdue.edu") ): mail.move("INBOX.classes.2014-2.PHYS221") return # Spring 2015 ######################################################### # CS352 (Compilers) if is_to_or_from(mail, "wjg@cs.purdue.edu"): mail.move("INBOX.classes.2015-1.CS352") return if piazza_topic(mail, "CS 352"): mail.move("INBOX.classes.2015-1.CS352.Piazza") return # CS408 (Software testing) if (False or mail["Subject"].contains("spring-2015-cs-40800") or is_to_or_from(mail, "li1471@purdue.edu") or is_to_or_from(mail, "kirby@purdue.edu") or is_to_or_from(mail, "webb39@purdue.edu") or is_to_or_from(mail, "Jkou@purdue.edu") or is_to_or_from(mail, "nstodda@purdue.edu") or is_to_or_from(mail, "aryker@purdue.edu") # TA ): mail.move("INBOX.classes.2015-1.CS408") return # CS448 (Databases) if piazza_topic(mail, "CS 44800"): mail.move("INBOX.classes.2015-1.CS448.Piazza") return if mail["Subject"].matches("CS *448"): mail.move("INBOX.classes.2015-1.CS448") return # ME297 (FRC) if (False or mail["Subject"].contains("[ME297]") or is_to_or_from(mail, "heller5@purdue.edu") ): mail.move("INBOX.classes.2015-1.ME297") return # SOC324 (Criminology) if mail["Subject"].contains("spring-2015-soc-32400"): mail.move("INBOX.classes.2015-1.SOC324") return # Everything else ##################################################### mail.move("INBOX.ham"); handle_mapping = { "INBOX": my_filters, } processor.maildirs = handle_mapping.keys() for mail in processor: handle_mapping[mail.maildir](mail)