Commit 4081042e authored by Claude Paroz's avatar Claude Paroz
Browse files

[1.5.x] Fixed #19134 -- Allowed closing smtp backend when the server is stopped

Thanks Sebastian Noack for the report and the initial patch.
Backport of 1b3f832a from master.
parent a893ee33
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -63,9 +63,10 @@ class EmailBackend(BaseEmailBackend):
        try:
            try:
                self.connection.quit()
            except socket.sslerror:
            except (socket.sslerror, smtplib.SMTPServerDisconnected):
                # This happens when calling quit() on a TLS connection
                # sometimes.
                # sometimes, or when the connection was already disconnected
                # by the server.
                self.connection.close()
            except:
                if self.fail_silently:
+16 −3
Original line number Diff line number Diff line
@@ -659,7 +659,7 @@ class FakeSMTPServer(smtpd.SMTPServer, threading.Thread):
        asyncore.close_all()

    def stop(self):
        assert self.active
        if self.active:
            self.active = False
            self.join()

@@ -715,3 +715,16 @@ class SMTPBackendTests(BaseEmailBackendTests, TestCase):
        backend = smtp.EmailBackend(username='', password='')
        self.assertEqual(backend.username, '')
        self.assertEqual(backend.password, '')

    def test_server_stopped(self):
        """
        Test that closing the backend while the SMTP server is stopped doesn't
        raise an exception.
        """
        backend = smtp.EmailBackend(username='', password='')
        backend.open()
        self.server.stop()
        try:
            backend.close()
        except Exception as e:
            self.fail("close() unexpectedly raised an exception: %s" % e)