From bac4748ffdf7dfbfa4020e56e61706d78c3fb66a Mon Sep 17 00:00:00 2001 From: David Read Date: Mon, 25 Jul 2016 12:07:45 +0000 Subject: [PATCH] Fix - better exception for when bad smtp settings. --- ckan/lib/mailer.py | 9 ++++++++- ckan/tests/lib/test_mailer.py | 12 +++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/ckan/lib/mailer.py b/ckan/lib/mailer.py index 1efa7a3bd3a..9eaf2fd6813 100644 --- a/ckan/lib/mailer.py +++ b/ckan/lib/mailer.py @@ -1,6 +1,7 @@ # encoding: utf-8 import smtplib +import socket import logging import uuid from time import time @@ -56,7 +57,13 @@ def _mail_recipient(recipient_name, recipient_email, config.get('smtp.starttls')) smtp_user = config.get('smtp.user') smtp_password = config.get('smtp.password') - smtp_connection.connect(smtp_server) + + try: + smtp_connection.connect(smtp_server) + except socket.error, e: + log.exception(e) + raise MailerException('SMTP server could not be connected to: "%s" %s' + % (smtp_server, e)) try: # Identify ourselves and prompt the server for supported features. smtp_connection.ehlo() diff --git a/ckan/tests/lib/test_mailer.py b/ckan/tests/lib/test_mailer.py index d04fa24d4f7..2ea839371cb 100644 --- a/ckan/tests/lib/test_mailer.py +++ b/ckan/tests/lib/test_mailer.py @@ -1,6 +1,6 @@ # encoding: utf-8 -from nose.tools import assert_equal, assert_raises, assert_in +from nose.tools import assert_equal, assert_raises, assert_in, assert_raises from email.mime.text import MIMEText from email.parser import Parser from email.header import decode_header @@ -223,3 +223,13 @@ def test_send_invite_email_with_org(self): body = self.get_email_body(msg[3]) assert_in(org['title'], body) assert_in(h.roles_translated()[role], body) + + @helpers.change_config('smtp.test_server', '999.999.999.999') + def test_bad_smtp_host(self): + test_email = {'recipient_name': 'Bob', + 'recipient_email': 'b@example.com', + 'subject': 'Meeting', + 'body': 'The meeting is cancelled.', + 'headers': {'header1': 'value1'}} + assert_raises(mailer.MailerException, + mailer.mail_recipient, **test_email)