aboutsummaryrefslogtreecommitdiffstats
path: root/push.py
diff options
context:
space:
mode:
authorMarius Halden <marius.h@lden.org>2015-04-11 00:43:28 +0200
committerMarius Halden <marius.h@lden.org>2015-04-11 00:43:28 +0200
commit7ce8ae6985c5bc2b658d35c9e123e8436d64b015 (patch)
tree20c0763bc85d835eb3b0e16ba22d47aad44c0149 /push.py
downloademail2push-7ce8ae6985c5bc2b658d35c9e123e8436d64b015.tar.gz
email2push-7ce8ae6985c5bc2b658d35c9e123e8436d64b015.tar.bz2
email2push-7ce8ae6985c5bc2b658d35c9e123e8436d64b015.tar.xz
Initial
Diffstat (limited to 'push.py')
-rw-r--r--push.py61
1 files changed, 61 insertions, 0 deletions
diff --git a/push.py b/push.py
new file mode 100644
index 0000000..ea6ab5c
--- /dev/null
+++ b/push.py
@@ -0,0 +1,61 @@
+#!/usr/local/bin/python
+
+import os
+import re
+import sys
+import yaml
+import pushover
+import email.header
+import email.parser
+
+try:
+ cfg = sys.argv[1]
+except IndexError:
+ cfg = os.path.dirname(os.path.realpath(__file__)) + '/push.cfg'
+
+with open(cfg) as fh:
+ maps = yaml.load(fh)
+
+sender_map = maps.get('senders', None)
+recipient_map = maps.get('recipients', None)
+
+recipient = os.environ.get('RECIPIENT', '')
+sender = os.environ.get('SENDER', '')
+api_token = None
+user_tokens = None
+
+if len(recipient) == 0 or len(sender) == 0:
+ print >>sys.stderr, "recipient or sender missing."
+ sys.exit(1)
+
+for s in sender_map:
+ if re.match(s.get('re', r'^$'), sender):
+ api_token = s.get('key', None)
+ break
+
+for r in recipient_map:
+ if re.match(r.get('re', r'^$'), recipient):
+ user_tokens = r.get('keys', None)
+ break
+
+if not api_token or not user_tokens:
+ print >>sys.stderr, "found no matching keys for sender or recipient."
+ sys.exit(1)
+
+parser = email.parser.Parser()
+mail = parser.parse(sys.stdin)
+
+title, encoding = email.header.decode_header(mail.get('subject'))[0]
+if title != None and encoding != None:
+ title = title.decode(encoding).encode('utf-8')
+
+payload = mail.get_payload(decode=True)
+encoding = mail.get_charsets()[0]
+if payload != None and encoding != None:
+ payload = payload.decode(encoding).encode('utf-8')
+
+msg = payload.strip()
+
+for user_token in user_tokens:
+ p = pushover.Client(user_token, api_token=api_token)
+ p.send_message(msg, title=title)