def _shouldProcess(path, msg): """ @todo: rate, interval configuration """ world = goneutil.RealWorld() err = blacklist.isBlacklist(msg) if err: return err seen = sets.Set() for deliveredTo in msg.get_all("Delivered-To", []): if deliveredTo in seen: # duplicate Delivered-To -- loop detected return "Message has duplicated Delivered-To line: %s" % deliveredTo seen.add(deliveredTo) rate = ratedir.RateDir(world, path) sender = goneutil.getSender(msg) try: rate.tick(sender) except igone.RateExceededError: return "Sender has sent too many messages" return False
def isBlacklist(msg): """ Should we never autorespond to this message? @param msg: the message @type msg: email.Message @return: An object that is true if message was blacklisted. Otherwise, it is non-true. If it is true, it can be stringified for an explanation. """ sender = util.getSender(msg) r = isBadSender(sender) if r: return r r = isMailingList(msg) if r: return r for s in msg.get_all('Precedence', []): precedence = s.split(None, 1)[0] if precedence.lower() in ['junk', 'bulk', 'list']: return "Message has a junk, bulk, or list precedence header" return False
def _cb(r, msg): if r: return r d = defer.maybeDeferred( prepare, msg, reply=goneInfo.message, recipient=recipient, recipientName=recipientName, subjectPrefix=goneInfo.settings.get("Subject", None), ) d.addCallback(_send, smtpHost=smtpHost, sender=sender, recipient=goneutil.getSender(msg)) return d
def prepare(msg, reply, recipient=None, recipientName=None, subjectPrefix=None): sender = goneutil.getSender(msg) if "From" not in reply and recipient is not None: if "@" in recipient: local, host = recipient.split("@", 1) box, domain = util.host_split(host) if domain is not None: host = domain recipient = str(smtp.Address(local, host)) reply["From"] = email.Utils.formataddr((recipientName, recipient)) to = msg.get_all("Sender", None) if to is None: to = msg.get_all("From", None) if to is None: to = [sender] for addr in to: reply["To"] = addr if "Subject" not in reply: subject = msg["Subject"] if subject is None: # echo foo | mail testaccount has no subject, if vacation # message has no subject either, sees this.. ugly due to # lack of l10n subject = "Your mail" if subjectPrefix is not None: subject = subjectPrefix + subject reply["Subject"] = subject msgid = msg.get("Message-ID", None) if msgid is not None: msgid = msgid.strip() reply["In-Reply-To"] = msgid if reply.is_multipart(): reply.attach(MIMEMessage(msg)) return reply