这是我使用的实现,我基于此Gmail改编的SMTPHandler。
我把发送到SMTP的部分放在了另一个线程中。
import logging.handlersimport smtplibfrom threading import Threaddef smtp_at_your_own_leasure(mailhost, port, username, password, fromaddr, toaddrs, msg): smtp = smtplib.SMTP(mailhost, port) if username: smtp.ehlo() # for tls add this line smtp.starttls() # for tls add this line smtp.ehlo() # for tls add this line smtp.login(username, password) smtp.sendmail(fromaddr, toaddrs, msg) smtp.quit()class ThreadedTlsSMTPHandler(logging.handlers.SMTPHandler): def emit(self, record): try: import string # for tls add this line try: from email.utils import formatdate except importError: formatdate = self.date_time port = self.mailport if not port: port = smtplib.SMTP_PORT msg = self.format(record) msg = "From: %srnTo: %srnSubject: %srnDate: %srnrn%s" % ( self.fromaddr, string.join(self.toaddrs, ","), self.getSubject(record), formatdate(), msg) thread = Thread(target=smtp_at_your_own_leasure, args=(self.mailhost, port, self.username, self.password, self.fromaddr, self.toaddrs, msg)) thread.start() except (KeyboardInterrupt, SystemExit): raise except: self.handleError(record)
logger = logging.getLogger()gm = ThreadedTlsSMTPHandler(("smtp.gmail.com", 587), 'bugs@my_company.com', ['admin@my_company.com'], 'Error found!', ('[email protected]', 'top_secret_gmail_password'))gm.setLevel(logging.ERROR)logger.addHandler(gm)try: 1/0except: logger.exception('FFFFFFFFFFFFFFFFFFFFFFFUUUUUUUUUUUUUUUUUUUUUU-')
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)