#!/usr/bin/env python # -*- mode: python -*- -*- coding: utf-8 -*- # http://mail.python.org/pipermail/python-list/2009-December/560408.html try: from email.utils import formatdate except: from email.Utils import formatdate import logging from logging.handlers import SMTPHandler import smtplib import sys import types VERSION = sys.version[:3] class BaseTlsSMTPHandler(SMTPHandler): def emit(self, record): """ Emit a record. Format the record and send it to the specified addressees. """ port = self.mailport if not port: port = smtplib.SMTP_PORT smtp = smtplib.SMTP(self.mailhost, port) msg = self.format(record) msg = "From: %s\r\nTo: %s\r\nSubject: %s\r\nDate: %s\r\n\r\n%s" % ( self.fromaddr, ','.join(self.toaddrs), self.getSubject(record), formatdate(), msg) if self.username: smtp.ehlo() # for tls add this line smtp.starttls() # for tls add this line smtp.ehlo() # for tls add this line smtp.login(self.username, self.password) smtp.sendmail(self.fromaddr, self.toaddrs, msg) smtp.quit() class TlsSMTPHandler(BaseTlsSMTPHandler): def __init__(self, mailhost, fromaddr, toaddrs, subject, credentials=None): if type(credentials) == types.TupleType: self.username, self.password = credentials else: self.username = None if VERSION >= '2.6': SMTPHandler.__init__(self, mailhost, fromaddr, toaddrs, subject, credentials) else: SMTPHandler.__init__(self, mailhost, fromaddr, toaddrs, subject) if __name__ == '__main__': host = ('smtp.gmail.com', 587) fromaddr = '[email protected]' recipients = ['[email protected]'] subject = 'Error %s' % VERSION credentials = ('YOUR_ACCOUNT', 'YOUR_PASSWORD') hdlr = TlsSMTPHandler(host, fromaddr, recipients, subject, credentials) logger = logging.getLogger() hdlr.setLevel(logging.ERROR) logger.addHandler(hdlr) try: 1/0 except: logger.exception('FFFFFFFFFFFFFFFFFFFFFFFUUUUUUUUUUUUUUUUUUUUUU-')