summaryrefslogtreecommitdiff
path: root/paste/exceptions
diff options
context:
space:
mode:
authorianb <devnull@localhost>2007-10-10 01:48:30 +0000
committerianb <devnull@localhost>2007-10-10 01:48:30 +0000
commitf3e7610aa20a24f7470e437d20f07a2754fe1eb1 (patch)
treeb2673a9bdfe49df88a0c668ed2057d172c63018d /paste/exceptions
parent30d01e5ca79b1778d16557cdc50f340cbb4c34af (diff)
downloadpaste-f3e7610aa20a24f7470e437d20f07a2754fe1eb1.tar.gz
Applied #181, allow smtp authentication for errors
Diffstat (limited to 'paste/exceptions')
-rw-r--r--paste/exceptions/errormiddleware.py18
-rw-r--r--paste/exceptions/reporter.py16
2 files changed, 32 insertions, 2 deletions
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: