summaryrefslogtreecommitdiff
path: root/emailcanary
diff options
context:
space:
mode:
Diffstat (limited to 'emailcanary')
-rw-r--r--emailcanary/canary.py98
-rw-r--r--emailcanary/emailutils.py5
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))