summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthieu Caneill <matthieucan@users.noreply.github.com>2023-07-22 14:46:59 (GMT)
committerGitHub <noreply@github.com>2023-07-22 14:46:59 (GMT)
commit3782def5a2b4d24ab5d356f89da181e99a9a59b2 (patch)
tree83c72fc5226091985ae4f1a7cd261029f1284159
parentd228825e08883fc13f35eb91435f95d32524931c (diff)
downloadcpython-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-xLib/smtplib.py4
-rw-r--r--Lib/test/test_smtplib.py14
-rw-r--r--Misc/NEWS.d/next/Library/2023-07-22-14-29-34.gh-issue-65495.fw84qM.rst1
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`.