diff options
author | Jesse Morgan <jesse@jesterpm.net> | 2022-04-30 21:13:24 -0700 |
---|---|---|
committer | Jesse Morgan <jesse@jesterpm.net> | 2022-04-30 21:13:24 -0700 |
commit | eb2463efc093103a6ded46212f4b27ba1b0e8ae2 (patch) | |
tree | a3ed31824d65f3ae1b78cdebe59bafb81e433bd6 /emailcanary/canary.py | |
parent | 04905ba6d973a57c9d37bb75ee376c896a47ac5d (diff) |
Fix email parsing after python3 upgrade
Diffstat (limited to 'emailcanary/canary.py')
-rw-r--r-- | emailcanary/canary.py | 98 |
1 files changed, 49 insertions, 49 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()) |