diff --git a/django/core/mail/backends/smtp.py b/django/core/mail/backends/smtp.py index baffa8f2df..3ae08f4340 100644 --- a/django/core/mail/backends/smtp.py +++ b/django/core/mail/backends/smtp.py @@ -60,6 +60,8 @@ class EmailBackend(BaseEmailBackend): def close(self): """Closes the connection to the email server.""" + if self.connection is None: + return try: try: self.connection.quit() diff --git a/tests/regressiontests/mail/tests.py b/tests/regressiontests/mail/tests.py index 9ab8c2c301..059dd6d09a 100644 --- a/tests/regressiontests/mail/tests.py +++ b/tests/regressiontests/mail/tests.py @@ -492,6 +492,16 @@ class BaseEmailBackendTests(object): self.assertEqual(message.get('from'), "tester") self.assertEqual(message.get('to'), "django") + def test_close_connection(self): + """ + Test that connection can be closed (even when not explicitely opened) + """ + conn = mail.get_connection(username='', password='') + try: + conn.close() + except Exception as e: + self.fail("close() unexpectedly raised an exception: %s" % e) + class LocmemBackendTests(BaseEmailBackendTests, TestCase): email_backend = 'django.core.mail.backends.locmem.EmailBackend'