From 04905ba6d973a57c9d37bb75ee376c896a47ac5d Mon Sep 17 00:00:00 2001 From: Jesse Morgan Date: Sat, 30 Apr 2022 10:34:53 -0700 Subject: Migrate to python3 --- emailcanary/canary.py | 7 ++--- emailcanary/email-digest-sender.py | 4 +-- emailcanary/emailutils.py | 52 ++++++++++++++++++++++++++------------ 3 files changed, 42 insertions(+), 21 deletions(-) (limited to 'emailcanary') 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() -- cgit v1.2.3