[Python-checkins] cpython (merge 3.4 -> 3.5): Closes #25411: Merged fix from 3.4.

vinay.sajip python-checkins at python.org
Sat Oct 17 11:24:34 EDT 2015


https://hg.python.org/cpython/rev/b99b3ddd0ac4
changeset:   98780:b99b3ddd0ac4
branch:      3.5
parent:      98777:a1c01f1209e3
parent:      98779:eb843115e052
user:        Vinay Sajip <vinay_sajip at yahoo.co.uk>
date:        Sat Oct 17 16:17:52 2015 +0100
summary:
  Closes #25411: Merged fix from 3.4.

files:
  Lib/logging/handlers.py  |  18 ++++++++++--------
  Lib/test/test_logging.py |   4 ++--
  Misc/NEWS                |   3 +++
  3 files changed, 15 insertions(+), 10 deletions(-)


diff --git a/Lib/logging/handlers.py b/Lib/logging/handlers.py
--- a/Lib/logging/handlers.py
+++ b/Lib/logging/handlers.py
@@ -965,24 +965,26 @@
         """
         try:
             import smtplib
-            from email.utils import formatdate
+            from email.message import EmailMessage
+            import email.utils
+
             port = self.mailport
             if not port:
                 port = smtplib.SMTP_PORT
             smtp = smtplib.SMTP(self.mailhost, port, timeout=self.timeout)
-            msg = self.format(record)
-            msg = "From: %s\r\nTo: %s\r\nSubject: %s\r\nDate: %s\r\n\r\n%s" % (
-                            self.fromaddr,
-                            ",".join(self.toaddrs),
-                            self.getSubject(record),
-                            formatdate(), msg)
+            msg = EmailMessage()
+            msg['From'] = self.fromaddr
+            msg['To'] = ','.join(self.toaddrs)
+            msg['Subject'] = self.getSubject(record)
+            msg['Date'] = email.utils.localtime()
+            msg.set_content(self.format(record))
             if self.username:
                 if self.secure is not None:
                     smtp.ehlo()
                     smtp.starttls(*self.secure)
                     smtp.ehlo()
                 smtp.login(self.username, self.password)
-            smtp.sendmail(self.fromaddr, self.toaddrs, msg)
+            smtp.send_message(msg)
             smtp.quit()
         except Exception:
             self.handleError(record)
diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py
--- a/Lib/test/test_logging.py
+++ b/Lib/test/test_logging.py
@@ -930,7 +930,7 @@
                                          timeout=self.TIMEOUT)
         self.assertEqual(h.toaddrs, ['you'])
         self.messages = []
-        r = logging.makeLogRecord({'msg': 'Hello'})
+        r = logging.makeLogRecord({'msg': 'Hello \u2713'})
         self.handled = threading.Event()
         h.handle(r)
         self.handled.wait(self.TIMEOUT)  # 14314: don't wait forever
@@ -941,7 +941,7 @@
         self.assertEqual(mailfrom, 'me')
         self.assertEqual(rcpttos, ['you'])
         self.assertIn('\nSubject: Log\n', data)
-        self.assertTrue(data.endswith('\n\nHello'))
+        self.assertTrue(data.endswith('\n\nHello \u2713'))
         h.close()
 
     def process_message(self, *args):
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -45,6 +45,9 @@
 Library
 -------
 
+- Issue #25411: Improved Unicode support in SMTPHandler through better use of
+  the email package. Thanks to user simon04 for the patch.
+
 - Issue #25407: Remove mentions of the formatter module being removed in
   Python 3.6.
 

-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list