better log formatting and limit lines to 80 char
[logparse.git] / logparse / mail.py
index ecd7afcd7b49baad3632544ecf37a0c8ff30ca52..82e3ddbabc08087da7351e88637da58735f37a5b 100644 (file)
@@ -1,9 +1,12 @@
-#
-#   email.py
-#
-#   This module is essentially a wrapper for Python's premailer and whatever
-#   the default mail handler is.
-#
+"""
+This module is essentially a wrapper for Python's premailer and whatever the 
+default mail transfer is (usually Postfix). Note that the premailer package 
+(https://pypi.org/project/premailer/) is required for style embedding.
+
+This module provides the following methods:
+    - `mailprep`:   embed CSS styles into inline HTML tags
+    - `sendmail`:   send HTML or plaintext email using default mail handler
+"""
 
 import logging
 logger = logging.getLogger(__name__)
@@ -13,7 +16,13 @@ import premailer
 from email.mime.text import MIMEText
 import subprocess
 
+
 def mailprep(htmlin, stylesheet):
+    """
+    Embed CSS styles from a file into inline HTML tags. Requires the premailer
+    package (https://pypi.org/project/premailer/).
+    """
+
     logger.debug("Converting stylesheet " + stylesheet + " to inline tags")
     if not isfile(stylesheet):
         logger.warning("Cannot read stylesheet {}: file does not exist".format(stylesheet))
@@ -24,13 +33,19 @@ def mailprep(htmlin, stylesheet):
     return htmlout
 
 
-def sendmail(mailbin, body, recipient, subject, *sender):
+def sendmail(mailbin, body, recipient, subject, html=True, sender=""):
+    """
+    Prepare and send an email in either HTML or plain text format. The default
+    MTA path is usually correct, but can be modified in the config option
+    "mailbin" in the [mail] section.
+    """
+
     logger.debug("Sending email")
-    msg = MIMEText(body, 'html')
+    msg = MIMEText(body, 'html' if html else 'plain')
     if sender:
         msg["From"] = sender
     msg["To"] = recipient
-    msg["Content-type"] = "text/html: te: text/html"
+    msg["Content-type"] = "text/html: te: text/html" if html else "text/plain: te: text/plain"
     msg["Subject"] = subject
     mailproc = subprocess.Popen([mailbin, "--debug-level=" + str(10 if logging.root.level == logging.DEBUG else 0), "-t"], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
     logger.debug("Compiled message and opened process")
@@ -39,12 +54,6 @@ def sendmail(mailbin, body, recipient, subject, *sender):
         logger.debug("sendmail output: {}".format(stdout))
         logger.info("Sent email to {0}".format(recipient))
         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