# HG changeset patch # User Matti Hamalainen # Date 1467626370 -10800 # Node ID 8262efacf3fb8c40b1bfc70a20a0a5749c2ed3ea # Parent dd240a7ad913bd886be76f013987517e8ed293af Initial implementation of sending e-mail in fatal error cases. diff -r dd240a7ad913 -r 8262efacf3fb multimerge.py --- a/multimerge.py Mon Jul 04 12:58:51 2016 +0300 +++ b/multimerge.py Mon Jul 04 12:59:30 2016 +0300 @@ -13,6 +13,10 @@ import re import time import datetime + +import smtplib +from email.mime.text import MIMEText + import httplib2 import ConfigParser import oauth2client @@ -40,6 +44,19 @@ ## Fatal errors def gcm_fatal(smsg): gcm_print(u"ERROR: "+ smsg) + if cfg.email_ok and cfg.email: + ## If e-mail is set, send e-mail + msg = MIMEText(("\n".join(gcm_msgbuf)).encode("UTF-8"), "plain") + msg.set_charset("UTF-8") + msg["Subject"] = cfg.email_subject + msg["From"] = cfg.email_sender + msg["To"] = ",".join(cfg.email_to) + try: + smtpH = smtplib.SMTP('localhost') + smtpH.sendmail(cfg.email_sender, cfg.email_to, msg.as_string()) + smtpH.quit() + except: + gcm_print("FATAL: Oh crap, e-mail sending failed.") sys.exit(1) @@ -221,6 +238,12 @@ cfg.mdef("debug", True, gcm_is_bool, gcm_trans_bool, False) +cfg.mdef("email_ok", False, None, None, False) +cfg.mdef("email", True, gcm_is_bool, gcm_trans_bool, False) +cfg.mdef("email_to", True, gcm_is_email_list, gcm_trans_email_list, None) +cfg.mdef("email_sender", True, gcm_is_email, None, None) +cfg.mdef("email_subject", True, gcm_is_string, None, "Google Calendar MultiMerge status") + cfg.mdef("source_regex", True, gcm_is_string, None, "^R:\s*(.*?)\s*\(\s*(.+?)\s*\)\s*$") cfg.mdef("source_regmap", False, gcm_is_list, gcm_trans_list, [1, 2]) cfg.mdef("source_regmap_len", False, None, None, len(cfg.source_regmap)) @@ -265,6 +288,17 @@ ## Validate settings +if cfg.email: + if cfg.email_subject == None or len(cfg.email_subject) == 0: + gcm_fatal("E-mail enabled but email_subject not set.") + elif cfg.email_sender == None: + gcm_fatal("E-mail enabled but email_sender not set.") + elif cfg.email_to == None: + gcm_fatal("E-mail enabled but email_to not set.") + else: + cfg.mset("email_ok", True) + + if len(cfg.source_regmap) != cfg.source_regmap_len: gcm_fatal("Setting source_regmap list must be {0} items.".format(cfg.source_regmap_len)) else: