import re class Email(object): def __init__(self, w, b): self.whitelist = w self.blacklist = b def getWhitelistEmails(self):return self.whitelist def getBlacklistEmails(self):return self.blacklist def acceptOriginatorEmail(self, email, default_accept=True): """ return true if this email is either whitelisted or not blacklisted """ whitelist = self.getWhitelistEmails() blacklist = self.getBlacklistEmails() # note the order for reject, emaillist in ([False, whitelist], [True, blacklist]): for okpattern in emaillist: if re.findall(okpattern.replace('*','\S+'), email, re.I): # match! if reject: return False else: return True # default is to accept all return default_accept e = Email(['*@foo.com', 'peter@peterbe.com'], ['spam@spam.com', 'annoying.*@peterbe.com'] ) def T(*x): print "%s\t%s" % (x[0], e.acceptOriginatorEmail(*x)) T("Peter@Foo.com") T("Peter@peterbe.com") T("Peter @peterbe.com") T("Peter @peterbe.com", True) T("Peter @peterbe.com", False) T("Spam@spamcom.com") T("Spam@spam.com") T("annoying@peterbe.com") T("annoying.anybody@peterbe.com") print "-"*20 # now suppose you want to by default blacklist everything # and only accept selected few e = Email(['mail@peterbe.com'], ['*'] ) def T(*x): print "%s\t%s" % (x[0], e.acceptOriginatorEmail(*x)) T("Peter@Foo.com") T("Peter@peterbe.com") T("Peter @peterbe.com") T("Peter @peterbe.com", True) T("Peter @peterbe.com", False) T("Spam@spamcom.com") T("Spam@spam.com") T("annoying@peterbe.com") T("annoying.anybody@peterbe.com") T("mail@peterbe.com")