mirror of https://github.com/django/django.git
Fixed #26210 -- Prevented SMTP backend from trying to send mail after a connection failure.
This commit is contained in:
parent
2b8ccff3b6
commit
42dc9d0400
|
@ -41,8 +41,9 @@ class EmailBackend(BaseEmailBackend):
|
||||||
|
|
||||||
def open(self):
|
def open(self):
|
||||||
"""
|
"""
|
||||||
Ensures we have a connection to the email server. Returns whether or
|
Ensure an open connection to the email server. Return whether or not a
|
||||||
not a new connection was required (True or False).
|
new connection was required (True or False) or None if an exception
|
||||||
|
passed silently.
|
||||||
"""
|
"""
|
||||||
if self.connection:
|
if self.connection:
|
||||||
# Nothing to do if the connection is already open.
|
# Nothing to do if the connection is already open.
|
||||||
|
@ -102,7 +103,7 @@ class EmailBackend(BaseEmailBackend):
|
||||||
return
|
return
|
||||||
with self._lock:
|
with self._lock:
|
||||||
new_conn_created = self.open()
|
new_conn_created = self.open()
|
||||||
if not self.connection:
|
if not self.connection or new_conn_created is None:
|
||||||
# We failed silently on open().
|
# We failed silently on open().
|
||||||
# Trying to send would be pointless.
|
# Trying to send would be pointless.
|
||||||
return
|
return
|
||||||
|
|
|
@ -1448,6 +1448,19 @@ class SMTPBackendTests(BaseEmailBackendTests, SMTPBackendTestsBase):
|
||||||
finally:
|
finally:
|
||||||
SMTP.send = send
|
SMTP.send = send
|
||||||
|
|
||||||
|
def test_send_messages_after_open_failed(self):
|
||||||
|
"""
|
||||||
|
send_messages() shouldn't try to send messages if open() raises an
|
||||||
|
exception after initializing the connection.
|
||||||
|
"""
|
||||||
|
backend = smtp.EmailBackend()
|
||||||
|
# Simulate connection initialization success and a subsequent
|
||||||
|
# connection exception.
|
||||||
|
backend.connection = True
|
||||||
|
backend.open = lambda: None
|
||||||
|
email = EmailMessage('Subject', 'Content', 'from@example.com', ['to@example.com'])
|
||||||
|
self.assertEqual(backend.send_messages([email]), None)
|
||||||
|
|
||||||
|
|
||||||
class SMTPBackendStoppedServerTest(SMTPBackendTestsBase):
|
class SMTPBackendStoppedServerTest(SMTPBackendTestsBase):
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in New Issue