mirror of
https://github.com/python/cpython.git
synced 2025-09-27 02:39:58 +00:00
Merge #22215: have the smtplib 'quit' command reset the state.
This commit is contained in:
commit
b10be15508
3 changed files with 23 additions and 0 deletions
|
@ -891,6 +891,10 @@ class SMTP:
|
||||||
def quit(self):
|
def quit(self):
|
||||||
"""Terminate the SMTP session."""
|
"""Terminate the SMTP session."""
|
||||||
res = self.docmd("quit")
|
res = self.docmd("quit")
|
||||||
|
# A new EHLO is required after reconnecting with connect()
|
||||||
|
self.ehlo_resp = self.helo_resp = None
|
||||||
|
self.esmtp_features = {}
|
||||||
|
self.does_esmtp = False
|
||||||
self.close()
|
self.close()
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
|
|
@ -876,6 +876,21 @@ class SMTPSimTests(unittest.TestCase):
|
||||||
str(err))
|
str(err))
|
||||||
smtp.close()
|
smtp.close()
|
||||||
|
|
||||||
|
def test_quit_resets_greeting(self):
|
||||||
|
smtp = smtplib.SMTP(HOST, self.port,
|
||||||
|
local_hostname='localhost',
|
||||||
|
timeout=15)
|
||||||
|
code, message = smtp.ehlo()
|
||||||
|
self.assertEqual(code, 250)
|
||||||
|
self.assertIn('size', smtp.esmtp_features)
|
||||||
|
smtp.quit()
|
||||||
|
self.assertNotIn('size', smtp.esmtp_features)
|
||||||
|
smtp.connect(HOST, self.port)
|
||||||
|
self.assertNotIn('size', smtp.esmtp_features)
|
||||||
|
smtp.ehlo_or_helo_if_needed()
|
||||||
|
self.assertIn('size', smtp.esmtp_features)
|
||||||
|
smtp.quit()
|
||||||
|
|
||||||
def test_with_statement(self):
|
def test_with_statement(self):
|
||||||
with smtplib.SMTP(HOST, self.port) as smtp:
|
with smtplib.SMTP(HOST, self.port) as smtp:
|
||||||
code, message = smtp.noop()
|
code, message = smtp.noop()
|
||||||
|
|
|
@ -124,6 +124,10 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #22216: smtplib now resets its state more completely after a quit. The
|
||||||
|
most obvious consequence of the previous behavior was a STARTTLS failure
|
||||||
|
during a connect/starttls/quit/connect/starttls sequence.
|
||||||
|
|
||||||
- Issue #22098: ctypes' BigEndianStructure and LittleEndianStructure now
|
- Issue #22098: ctypes' BigEndianStructure and LittleEndianStructure now
|
||||||
define an empty __slots__ so that subclasses don't always get an instance
|
define an empty __slots__ so that subclasses don't always get an instance
|
||||||
dict. Patch by Claudiu Popa.
|
dict. Patch by Claudiu Popa.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue