summaryrefslogtreecommitdiff
path: root/emailcanary
diff options
context:
space:
mode:
authorJesse Morgan <jesse@jesterpm.net>2022-04-30 10:34:53 -0700
committerJesse Morgan <jesse@jesterpm.net>2022-04-30 10:34:53 -0700
commit04905ba6d973a57c9d37bb75ee376c896a47ac5d (patch)
treecb56c09e7c055c9656c6ea3d25f5ea8eb147072a /emailcanary
parente88bebbf326baabb26dff0b5a69cae3b91e925bd (diff)
Migrate to python3
Diffstat (limited to 'emailcanary')
-rw-r--r--emailcanary/canary.py7
-rw-r--r--emailcanary/email-digest-sender.py4
-rw-r--r--emailcanary/emailutils.py52
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()