]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-65495: Use lowercase `mail from` and `rcpt to` in `smtplib.SMTP` (#107019)
authorMatthieu Caneill <matthieucan@users.noreply.github.com>
Sat, 22 Jul 2023 14:46:59 +0000 (16:46 +0200)
committerGitHub <noreply@github.com>
Sat, 22 Jul 2023 14:46:59 +0000 (16:46 +0200)
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.

Lib/smtplib.py
Lib/test/test_smtplib.py
Misc/NEWS.d/next/Library/2023-07-22-14-29-34.gh-issue-65495.fw84qM.rst [new file with mode: 0644]

index 18c91746fd7bf25a8905b9934e3366fc078bc950..b3cc68a789a7d8eb1b26b27c56b6fd8d7f175269 100755 (executable)
@@ -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):
index b6d5b8c3d82580ebc02a74721ae9bf32b9cf2378..f2e02dab1c3ca53ca002d7bdffb9ad43fb92ba1d 100644 (file)
@@ -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 (file)
index 0000000..e75b6c0
--- /dev/null
@@ -0,0 +1 @@
+Use lowercase ``mail from`` and ``rcpt to`` in :class:`smptlib.SMTP`.