diff options
Diffstat (limited to 'emailcanary')
| -rw-r--r-- | emailcanary/canary.py | 98 | ||||
| -rw-r--r-- | emailcanary/emailutils.py | 5 | 
2 files changed, 52 insertions, 51 deletions
| diff --git a/emailcanary/canary.py b/emailcanary/canary.py index cfac01b..93e9d42 100644 --- a/emailcanary/canary.py +++ b/emailcanary/canary.py @@ -4,52 +4,52 @@ import re  from . import emailutils  class Canary: -	def __init__(self, db, smtp, fromaddress): -		self.db = db -		self.smtp = smtp -		self.fromaddress = fromaddress - -	def chirp(self, listAddress): -		chirpUUID = str(uuid.uuid4()) -		now = datetime.datetime.now() - -		receipients = self.db.get_recipients_for_list(listAddress) -		if len(receipients) == 0: -			raise Exception("No receipients for listAddress '%s'", (listAddress,)) - -		self.send(listAddress, now, chirpUUID) -		for dest in receipients: -			self.db.ping(listAddress, dest, now, chirpUUID) - -	def check(self, listAddress): -		'''Check for messages from listAddress and return a list of missing chirps''' -		accounts = self.db.get_accounts(listAddress) -		if len(accounts) == 0: -			raise Exception("No receipients for listAddress '%s'", (listAddress,)) -		for (listAddress, address, imapserver, password) in accounts: -			mail = emailutils.get_imap(imapserver, address, password) -			these_subjects = [] -			for uid in emailutils.get_mail_uids(mail): -				message = emailutils.get_message(mail, uid) -				if message is not None and self.processMessage(address, message): -					emailutils.delete_message(mail, uid) -			emailutils.close(mail) -		return self.db.get_missing_pongs(listAddress) - -	def processMessage(self, receipient, msg): -		match = re.match('.*Canary Email (.+)', str(msg['Subject'])) -		if match: -			chirpUUID = match.group(1) -			now = datetime.datetime.now() -			self.db.pong(receipient, now, chirpUUID) -			return True -		return False - -	def send(self, dest, date, chirpUUID): -		msg = email.message.Message() -		msg['From'] = self.fromaddress -		msg['To'] = dest -		msg['Subject'] = "Canary Email " + chirpUUID -		msg['Date'] = email.utils.formatdate(time.mktime(date.timetuple())) - -		self.smtp.sendmail(self.fromaddress, dest, msg.as_string()) +    def __init__(self, db, smtp, fromaddress): +        self.db = db +        self.smtp = smtp +        self.fromaddress = fromaddress + +    def chirp(self, listAddress): +        chirpUUID = str(uuid.uuid4()) +        now = datetime.datetime.now() + +        receipients = self.db.get_recipients_for_list(listAddress) +        if len(receipients) == 0: +            raise Exception("No receipients for listAddress '%s'", (listAddress,)) + +        self.send(listAddress, now, chirpUUID) +        for dest in receipients: +            self.db.ping(listAddress, dest, now, chirpUUID) + +    def check(self, listAddress): +        '''Check for messages from listAddress and return a list of missing chirps''' +        accounts = self.db.get_accounts(listAddress) +        if len(accounts) == 0: +            raise Exception("No receipients for listAddress '%s'", (listAddress,)) +        for (listAddress, address, imapserver, password) in accounts: +            mail = emailutils.get_imap(imapserver, address, password) +            these_subjects = [] +            for uid in emailutils.get_mail_uids(mail): +                message = emailutils.get_message(mail, uid) +                if message is not None and self.processMessage(address, message): +                    emailutils.delete_message(mail, uid) +            emailutils.close(mail) +        return self.db.get_missing_pongs(listAddress) + +    def processMessage(self, receipient, msg): +        match = re.match('.*Canary Email (.+)', msg['Subject']) +        if match: +            chirpUUID = match.group(1) +            now = datetime.datetime.now() +            self.db.pong(receipient, now, chirpUUID) +            return True +        return False + +    def send(self, dest, date, chirpUUID): +        msg = email.message.Message() +        msg['From'] = self.fromaddress +        msg['To'] = dest +        msg['Subject'] = "Canary Email " + chirpUUID +        msg['Date'] = email.utils.formatdate(time.mktime(date.timetuple())) + +        self.smtp.sendmail(self.fromaddress, dest, msg.as_string()) diff --git a/emailcanary/emailutils.py b/emailcanary/emailutils.py index 54323a1..2358a3a 100644 --- a/emailcanary/emailutils.py +++ b/emailcanary/emailutils.py @@ -1,6 +1,7 @@  import sys  import imaplib, email +  def get_imap(server, username, password):      '''Connect and login via IMAP'''      try: @@ -29,8 +30,8 @@ def get_message(mail, uid):          if dat0 is None:              return None          else: -            raw_email = str(dat0[1]) -            return email.message_from_string(raw_email) +            raw_email = dat0[1] +            return email.message_from_bytes(raw_email)      else:          raise Exception("Bad response from server: %s" % (result)) | 
