FAQ | This is a LIVE service | Changelog

Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
BufferingSMTPHandler.py 1.72 KiB
import json
import logging
import logging.handlers
import smtplib
from typing import Tuple, List


class BufferingSMTPHandler(logging.handlers.BufferingHandler):

    # BASED ON CODE DEFINED HERE:
    # https://gist.github.com/anonymous/1379446 LINKED OUT FROM THIS ISSUE:
    # https://stackoverflow.com/questions/1610845/collate-output-in-python-logging-memoryhandler-with-smtphandler

    def __init__(self,
                 server: Tuple[str, str],
                 credentials: Tuple[str, str],
                 fromaddr: str, toaddrs: List[str], subject: str, capacity: int):

        logging.handlers.BufferingHandler.__init__(self, capacity)
        self.mailhost = server[0]
        self.mailport = server[1]
        self.login = credentials[0]
        self.passwd = credentials[1]
        self.fromaddr = fromaddr
        self.toaddrs = toaddrs
        self.subject = subject
        self.setFormatter(logging.Formatter("%(asctime)s %(levelname)-5s %(message)s"))

    def flush(self):
        if len(self.buffer) > 0:
            try:
                port = self.mailport
                server = smtplib.SMTP(self.mailhost, port)
                msg = "From: %s\r\nTo: %s\r\nSubject: %s\r\n\r\n" % (self.fromaddr, ','.join(self.toaddrs), self.subject)
                for record in self.buffer:
                    s = self.format(record)
                    print(s)
                    msg = msg + s + "\r\n"

                server.ehlo()
                server.starttls()
                server.login(self.login, self.passwd)
                server.sendmail(self.fromaddr, self.toaddrs, msg)
                server.quit()
            except:
                raise Exception("Error thrown in BufferingSMTPHandler")
            self.buffer = []