# HG changeset patch # User Matti Hamalainen # Date 1476786380 -10800 # Node ID f45115bfb17a300548a33b4e08daf07c4fc2a1d1 # Parent c0c177950dac134405895e4d62cc8ebcea0fab1f Implement sendmail mail sending support. Various e-mail related settings have also changed, so this is not backwards compatible. Sorry. diff -r c0c177950dac -r f45115bfb17a example.cfg --- a/example.cfg Tue Oct 18 12:56:44 2016 +0300 +++ b/example.cfg Tue Oct 18 13:26:20 2016 +0300 @@ -31,18 +31,24 @@ ### ### E-mail settings ### -# Enable/disable sending of e-mail message in case of fatal errors +# Enable sending of e-mail message in case of fatal errors +# off = Don't send e-mail +# smtp = use an SMTP server for sending (see below settings) +# sendmail = use local sendmail (see below settings) email = off +# Sendmail binary location +email_sendmail = /usr/bin/sendmail + # SMTP server for sending mail -#email_server = host[:port] +#email_smtp_server = host[:port] # SMTP user and password (not encrypted!) -#email_srv_user = username -#email_srv_password = password +#email_smtp_user = username +#email_smtp_password = password # Use TLS -#email_use_tls = no +#email_smtp_tls = no # Message subject diff -r c0c177950dac -r f45115bfb17a multimerge.py --- a/multimerge.py Tue Oct 18 12:56:44 2016 +0300 +++ b/multimerge.py Tue Oct 18 13:26:20 2016 +0300 @@ -17,7 +17,7 @@ import codecs import math import time -#import datetime +from subprocess import Popen, PIPE import smtplib from email.mime.text import MIMEText @@ -61,26 +61,33 @@ ## Fatal errors def gcm_fatal(smsg): gcm_print(u"ERROR: "+ smsg) - if cfg.email_ok and cfg.email: + if cfg.email_ok and cfg.email != "off": ## 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) + gcm_print("Sending mail to {0} from {1}, subj: {2} ..".format(";".join(cfg.email_to), cfg.email_sender, cfg.email_subject)) try: - server = smtplib.SMTP(cfg.email_server) - if gcm_check_debug(4): - server.set_debuglevel(10) + if cfg.email == "smtp": + gcm_print("Using SMTP server {0}, login {1}".format(cfg.email_smtp_server, cfg.email_smtp_user)) + server = smtplib.SMTP(cfg.email_smtp_server) + if gcm_check_debug(4): + server.set_debuglevel(10) - if cfg.email_use_tls: - server.starttls() + if cfg.email_smtp_tls: + server.starttls() - server.login(cfg.email_srv_user, cfg.email_srv_password) - server.sendmail(cfg.email_sender, cfg.email_to, msg.as_string()) - server.quit() + server.login(cfg.email_smtp_user, cfg.email_smtp_password) + server.sendmail(cfg.email_sender, cfg.email_to, msg.as_string()) + server.quit() + elif cfg.email == "sendmail": + gcm_print("Using sendmail {0}".format(cfg.email_sendmail)) + p = Popen([cfg.email_sendmail, "-t", "-oi"], stdin=PIPE) + p.communicate(msg.as_string()) except Exception as e: - gcm_print(u"FATAL: Oh crap, e-mail sending failed: {0}".format(str(e))) + gcm_print(u"FATAL: Oh noes, e-mail sending failed: {0}".format(str(e))) sys.exit(1) @@ -316,6 +323,15 @@ def trans_log_level(self, mvalue): return mvalue.upper() + def is_email_state(self, mvalue): + if not self.is_str(mvalue): + return False + else: + return mvalue.lower() in [u"off", u"sendmail", u"smtp"] + + def trans_email_state(self, mvalue): + return mvalue.lower() + def is_filename(self, mvalue): if not self.is_str(mvalue): return False @@ -388,15 +404,17 @@ cfg.mdef("debug", True, cfg.is_bool, cfg.trans_bool, False) cfg.mdef("email_ok", False, None, None, False) -cfg.mdef("email", True, cfg.is_bool, cfg.trans_bool, False) +cfg.mdef("email", True, cfg.is_email_state, cfg.trans_email_state, u"off") + cfg.mdef("email_to", True, cfg.is_email_list, cfg.trans_email_list, None) cfg.mdef("email_sender", True, cfg.is_email, None, None) cfg.mdef("email_subject", True, cfg.is_string, None, u"Google Calendar MultiMerge status") -cfg.mdef("email_use_tls", True, cfg.is_bool, cfg.trans_bool, False) -cfg.mdef("email_server", True, cfg.is_string, None, None) -cfg.mdef("email_srv_user", True, cfg.is_string, None, None) -cfg.mdef("email_srv_password", True, cfg.is_string, None, None) +cfg.mdef("email_sendmail", True, cfg.is_string, None, "/usr/sbin/sendmail") +cfg.mdef("email_smtp_tls", True, cfg.is_bool, cfg.trans_bool, False) +cfg.mdef("email_smtp_server", True, cfg.is_string, None, None) +cfg.mdef("email_smtp_user", True, cfg.is_string, None, None) +cfg.mdef("email_smtp_password", True, cfg.is_string, None, None) cfg.mdef("src_regex", True, cfg.is_string, None, u"^R:\s*(.*?)\s*\(\s*(.+?)\s*\)\s*$") cfg.mdef("src_regmap", False, cfg.is_list, cfg.trans_list, [1, 2]) @@ -447,7 +465,7 @@ ## Validate settings -if cfg.email: +if cfg.email != "off": if cfg.email_subject == None or len(cfg.email_subject) == 0: gcm_fatal(u"E-mail enabled but email_subject not set.") elif cfg.email_sender == None: