#!/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, 'r') as fh: maps = yaml.load(fh) sender_map = maps.get('senders', []) recipient_map = maps.get('recipients', []) 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 is not None and encoding is not None: title = title.decode(encoding).encode('utf-8') payload = mail.get_payload(decode=True) encoding = mail.get_charsets()[0] if payload is not None and encoding is not None: payload = payload.decode(encoding).encode('utf-8') msg = payload.strip() if type(user_tokens) is list: for user_token in user_tokens: p = pushover.Client(user_token, api_token=api_token) p.send_message(msg, title=title) else: p = pushover.Client(user_tokens, api_token=api_token) p.send_message(msg, title=title)