diff options
author | Jesse Morgan <jesse@jesterpm.net> | 2022-04-30 10:34:53 -0700 |
---|---|---|
committer | Jesse Morgan <jesse@jesterpm.net> | 2022-04-30 10:34:53 -0700 |
commit | 04905ba6d973a57c9d37bb75ee376c896a47ac5d (patch) | |
tree | cb56c09e7c055c9656c6ea3d25f5ea8eb147072a /emailcanary | |
parent | e88bebbf326baabb26dff0b5a69cae3b91e925bd (diff) |
Migrate to python3
Diffstat (limited to 'emailcanary')
-rw-r--r-- | emailcanary/canary.py | 7 | ||||
-rw-r--r-- | emailcanary/email-digest-sender.py | 4 | ||||
-rw-r--r-- | emailcanary/emailutils.py | 52 |
3 files changed, 42 insertions, 21 deletions
diff --git a/emailcanary/canary.py b/emailcanary/canary.py index aac6418..cfac01b 100644 --- a/emailcanary/canary.py +++ b/emailcanary/canary.py @@ -1,6 +1,7 @@ import uuid, datetime, time -import email.message, emailutils +import email.message import re +from . import emailutils class Canary: def __init__(self, db, smtp, fromaddress): @@ -30,13 +31,13 @@ class Canary: these_subjects = [] for uid in emailutils.get_mail_uids(mail): message = emailutils.get_message(mail, uid) - if self.processMessage(address, message): + 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']) + match = re.match('.*Canary Email (.+)', str(msg['Subject'])) if match: chirpUUID = match.group(1) now = datetime.datetime.now() diff --git a/emailcanary/email-digest-sender.py b/emailcanary/email-digest-sender.py index a7ff79f..fa4fcb0 100644 --- a/emailcanary/email-digest-sender.py +++ b/emailcanary/email-digest-sender.py @@ -1,6 +1,6 @@ -import emailutils import smtplib from email import message +from . import emailutils PASSWORD="secret" ACCOUNTS = [('mail.example.com', 'email@example.com', PASSWORD)] @@ -35,4 +35,4 @@ if youve_got_mail: s = smtplib.SMTP_SSL('localhost', 2465) s.sendmail(DESTINATION, DESTINATION, digest_message.as_string()) - s.quit()
\ No newline at end of file + s.quit() diff --git a/emailcanary/emailutils.py b/emailcanary/emailutils.py index 83c2f46..54323a1 100644 --- a/emailcanary/emailutils.py +++ b/emailcanary/emailutils.py @@ -1,27 +1,47 @@ +import sys import imaplib, email def get_imap(server, username, password): - '''Connect and login via IMAP''' - mail = imaplib.IMAP4_SSL(server) - mail.login(username, password) - return mail + '''Connect and login via IMAP''' + try: + mail = imaplib.IMAP4_SSL(server) + mail.login(username, password) + return mail + except Exception as e: + sys.stderr.write("Error connecting to %s@%s: %s\n\n" % (username, server, str(e))) + return None def get_mail_uids(mail): - '''Return a list of message UIDs in the inbox''' - mail.select("inbox") # connect to inbox. - result, data = mail.uid('search', None, "ALL") # search and return uids instead - return data[0].split() + '''Return a list of message UIDs in the inbox''' + if mail is None: + return [] + mail.select("inbox") # connect to inbox. + result, data = mail.uid('search', None, "ALL") # search and return uids instead + return data[0].split() def get_message(mail, uid): - '''Get a single email message object by UID''' - result, data = mail.uid('fetch', uid, '(RFC822)') - raw_email = data[0][1] - return email.message_from_string(raw_email) + '''Get a single email message object by UID''' + if mail is None: + return None + result, data = mail.uid('fetch', uid, '(RFC822)') + if result == 'OK': + dat0 = data[0] + if dat0 is None: + return None + else: + raw_email = str(dat0[1]) + return email.message_from_string(raw_email) + else: + raise Exception("Bad response from server: %s" % (result)) def delete_message(mail, uid): - result = mail.uid('store', uid, '+FLAGS', '(\Deleted)') + if mail is None: + return + result = mail.uid('store', uid, '+FLAGS', '(\Deleted)') def close(mail): - mail.expunge() - mail.close() - mail.logout() + if mail is None: + return + mail.expunge() + mail.close() + mail.logout() |