From f3e7610aa20a24f7470e437d20f07a2754fe1eb1 Mon Sep 17 00:00:00 2001 From: ianb Date: Wed, 10 Oct 2007 01:48:30 +0000 Subject: Applied #181, allow smtp authentication for errors --- paste/exceptions/errormiddleware.py | 18 +++++++++++++++++- paste/exceptions/reporter.py | 16 +++++++++++++++- 2 files changed, 32 insertions(+), 2 deletions(-) (limited to 'paste/exceptions') diff --git a/paste/exceptions/errormiddleware.py b/paste/exceptions/errormiddleware.py index c7af7de..8c5b15d 100644 --- a/paste/exceptions/errormiddleware.py +++ b/paste/exceptions/errormiddleware.py @@ -47,7 +47,8 @@ class ErrorMiddleware(object): If true, then errors will be printed to ``wsgi.errors`` (frequently a server error log, or stderr). - ``from_address``, ``smtp_server``, ``error_subject_prefix``: + ``from_address``, ``smtp_server``, ``error_subject_prefix``, + ``smtp_username``, ``smtp_password``, ``smtp_use_tls``: variables to control the emailed exception reports ``error_message``: @@ -85,6 +86,9 @@ class ErrorMiddleware(object): show_exceptions_in_wsgi_errors=NoDefault, from_address=None, smtp_server=None, + smtp_username=None, + smtp_password=None, + smtp_use_tls=False, error_subject_prefix=None, error_message=None, xmlhttp_key=None): @@ -113,6 +117,9 @@ class ErrorMiddleware(object): if smtp_server is None: smtp_server = global_conf.get('smtp_server', 'localhost') self.smtp_server = smtp_server + self.smtp_username = smtp_username or global_conf.get('smtp_username') + self.smtp_password = smtp_password or global_conf.get('smtp_password') + self.smtp_use_tls = smtp_use_tls or converters.asbool(global_conf.get('smtp_use_tls')) self.error_subject_prefix = error_subject_prefix or '' if error_message is None: error_message = global_conf.get('error_message') @@ -173,6 +180,9 @@ class ErrorMiddleware(object): show_exceptions_in_wsgi_errors=self.show_exceptions_in_wsgi_errors, error_email_from=self.from_address, smtp_server=self.smtp_server, + smtp_username=self.smtp_username, + smtp_password=self.smtp_password, + smtp_use_tls=self.smtp_use_tls, error_subject_prefix=self.error_subject_prefix, error_message=self.error_message, simple_html_error=simple_html_error) @@ -296,6 +306,9 @@ def handle_exception(exc_info, error_stream, html=True, show_exceptions_in_wsgi_errors=False, error_email_from='errors@localhost', smtp_server='localhost', + smtp_username=None, + smtp_password=None, + smtp_use_tls=False, error_subject_prefix='', error_message=None, simple_html_error=False, @@ -326,6 +339,9 @@ def handle_exception(exc_info, error_stream, html=True, to_addresses=error_email, from_address=error_email_from, smtp_server=smtp_server, + smtp_username=smtp_username, + smtp_password=smtp_password, + smtp_use_tls=smtp_use_tls, subject_prefix=error_subject_prefix) rep_err = send_report(rep, exc_data, html=html) if rep_err: diff --git a/paste/exceptions/reporter.py b/paste/exceptions/reporter.py index 7b1c5dd..354364a 100644 --- a/paste/exceptions/reporter.py +++ b/paste/exceptions/reporter.py @@ -5,6 +5,7 @@ from email.MIMEText import MIMEText from email.MIMEMultipart import MIMEMultipart import smtplib import time +from socket import sslerror from paste.exceptions import formatter class Reporter(object): @@ -35,14 +36,27 @@ class EmailReporter(Reporter): to_addresses = None from_address = None smtp_server = 'localhost' + smtp_username = None + smtp_password = None + smtp_use_tls = False subject_prefix = '' def report(self, exc_data): msg = self.assemble_email(exc_data) server = smtplib.SMTP(self.smtp_server) + if self.smtp_use_tls: + server.ehlo() + server.starttls() + server.ehlo() + if self.smtp_username and self.smtp_password: + server.login(self.smtp_username, self.smtp_password) server.sendmail(self.from_address, self.to_addresses, msg.as_string()) - server.quit() + try: + server.quit() + except sslerror: + # sslerror is raised in tls connections on closing sometimes + pass def check_params(self): if not self.to_addresses: -- cgit v1.2.1