summaryrefslogtreecommitdiff
path: root/emailcanary/canary.py
diff options
context:
space:
mode:
Diffstat (limited to 'emailcanary/canary.py')
-rw-r--r--emailcanary/canary.py33
1 files changed, 33 insertions, 0 deletions
diff --git a/emailcanary/canary.py b/emailcanary/canary.py
new file mode 100644
index 0000000..d07e2e9
--- /dev/null
+++ b/emailcanary/canary.py
@@ -0,0 +1,33 @@
+import uuid, datetime, time
+import email
+import re
+
+class Canary:
+ def __init__(self, db, smtp, fromaddress):
+ self.db = db
+ self.smtp = smtp
+ self.fromaddress = fromaddress
+
+ def chirp(self, list, expectedreceipients):
+ uuid = uuid.uuid4()
+ now = datetime.datetime.now()
+
+ self.send(list, now, uuid)
+ for dest in expectedreceipients:
+ self.db.ping(dest, now, uuid)
+
+ def echo(self, receipient, msg):
+ uuid = re.match('Canary Email (.+)', msg['Subject']).group(1)
+ now = datetime.datetime.now()
+
+ self.db.pong(receipient, now, uuid)
+
+
+ def send(self, dest, date, uuid):
+ msg = email.message.Message()
+ msg['From'] = self.fromaddress
+ msg['To'] = dest
+ msg['Subject'] = "Canary Email " + str(uuid)
+ msg['Date'] = email.utils.formatdate(time.mktime(date.timetuple()))
+
+ self.smtp.sendmail(self.fromaddress, dest, msg.as_string()) \ No newline at end of file