# # email.py # # This module is essentially a wrapper for Python's premailer and whatever # the default mail handler is. # import logging logger = logging.getLogger(__name__) from os.path import isfile from premailer import transform from email.mime.text import MIMEText import subprocess def mailprep(htmlin, stylesheet): logger.debug("Converting stylesheet " + stylesheet + " to inline tags") if not isfile(stylesheet): logger.warning("Cannot read stylesheet {}: file does not exist".format(stylesheet)) raise FileNotFoundError pm = premailer.Premailer(htmlin, external_styles=stylesheet) htmlout = pm.transform() logger.info("Converted stylesheet to inline tags") return htmlout def sendmail(mailbin, body, recipient, subject, *sender): logger.debug("Sending email") msg = MIMEText(body) if sender: msg["From"] = sender msg["To"] = recipient msg["Subject"] = subject mailproc = subprocess.Popen([mailbin, '--debug-level=10', '-t'], stdin=subprocess.PIPE, stdout=subprocess.PIPE) logger.debug("Compiled message and opened process") try: stdout = mailproc.communicate(msg.as_bytes(), timeout=15) logger.debug("sendmail output: {}".format(stdout)) logger.info("Sent email") return 0 # except TimeoutExpired: # mailproc.kill() # stdout = mailproc.communicate() # logger.debug("Timeout expired: {}".format(stdout)) # raise subprocess.TimeoutError except Exception as e: mailproc.kill() logger.warning("Failed to send message: {0}".format(str(e))) # raise ChildProcessError