diff options
author | Matthieu Caneill <matthieucan@users.noreply.github.com> | 2023-07-22 14:46:59 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-07-22 14:46:59 (GMT) |
commit | 3782def5a2b4d24ab5d356f89da181e99a9a59b2 (patch) | |
tree | 83c72fc5226091985ae4f1a7cd261029f1284159 | |
parent | d228825e08883fc13f35eb91435f95d32524931c (diff) | |
download | cpython-3782def5a2b4d24ab5d356f89da181e99a9a59b2.zip cpython-3782def5a2b4d24ab5d356f89da181e99a9a59b2.tar.gz cpython-3782def5a2b4d24ab5d356f89da181e99a9a59b2.tar.bz2 |
gh-65495: Use lowercase `mail from` and `rcpt to` in `smtplib.SMTP` (#107019)
Use lowercase `mail from` and `rcpt to` in `smtplib.SMTP`
SMTP commands are case-insensitive. `smtplib` uses lowercase commands,
however it writes `mail FROM` and `rcpt TO`, lacking consistency.
-rwxr-xr-x | Lib/smtplib.py | 4 | ||||
-rw-r--r-- | Lib/test/test_smtplib.py | 14 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2023-07-22-14-29-34.gh-issue-65495.fw84qM.rst | 1 |
3 files changed, 17 insertions, 2 deletions
diff --git a/Lib/smtplib.py b/Lib/smtplib.py index 18c9174..b3cc68a 100755 --- a/Lib/smtplib.py +++ b/Lib/smtplib.py @@ -542,7 +542,7 @@ class SMTP: raise SMTPNotSupportedError( 'SMTPUTF8 not supported by server') optionlist = ' ' + ' '.join(options) - self.putcmd("mail", "FROM:%s%s" % (quoteaddr(sender), optionlist)) + self.putcmd("mail", "from:%s%s" % (quoteaddr(sender), optionlist)) return self.getreply() def rcpt(self, recip, options=()): @@ -550,7 +550,7 @@ class SMTP: optionlist = '' if options and self.does_esmtp: optionlist = ' ' + ' '.join(options) - self.putcmd("rcpt", "TO:%s%s" % (quoteaddr(recip), optionlist)) + self.putcmd("rcpt", "to:%s%s" % (quoteaddr(recip), optionlist)) return self.getreply() def data(self, msg): diff --git a/Lib/test/test_smtplib.py b/Lib/test/test_smtplib.py index b6d5b8c..f2e02da 100644 --- a/Lib/test/test_smtplib.py +++ b/Lib/test/test_smtplib.py @@ -831,6 +831,7 @@ class SimSMTPChannel(smtpd.SMTPChannel): def __init__(self, extra_features, *args, **kw): self._extrafeatures = ''.join( [ "250-{0}\r\n".format(x) for x in extra_features ]) + self.all_received_lines = [] super(SimSMTPChannel, self).__init__(*args, **kw) # AUTH related stuff. It would be nice if support for this were in smtpd. @@ -845,6 +846,7 @@ class SimSMTPChannel(smtpd.SMTPChannel): self.smtp_state = self.COMMAND self.push('%s %s' % (e.smtp_code, e.smtp_error)) return + self.all_received_lines.append(self.received_lines) super().found_terminator() @@ -1349,6 +1351,18 @@ class SMTPSimTests(unittest.TestCase): self.assertEqual(self.serv._addresses['from'], 'michael@example.com') self.assertEqual(self.serv._addresses['tos'], ['rene@example.com']) + def test_lowercase_mail_from_rcpt_to(self): + m = 'A test message' + smtp = smtplib.SMTP( + HOST, self.port, local_hostname='localhost', + timeout=support.LOOPBACK_TIMEOUT) + self.addCleanup(smtp.close) + + smtp.sendmail('John', 'Sally', m) + + self.assertIn(['mail from:<John> size=14'], self.serv._SMTPchannel.all_received_lines) + self.assertIn(['rcpt to:<Sally>'], self.serv._SMTPchannel.all_received_lines) + class SimSMTPUTF8Server(SimSMTPServer): diff --git a/Misc/NEWS.d/next/Library/2023-07-22-14-29-34.gh-issue-65495.fw84qM.rst b/Misc/NEWS.d/next/Library/2023-07-22-14-29-34.gh-issue-65495.fw84qM.rst new file mode 100644 index 0000000..e75b6c0 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2023-07-22-14-29-34.gh-issue-65495.fw84qM.rst @@ -0,0 +1 @@ +Use lowercase ``mail from`` and ``rcpt to`` in :class:`smptlib.SMTP`. |