summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVinay Sajip <vinay_sajip@yahoo.co.uk>2015-10-17 15:17:52 (GMT)
committerVinay Sajip <vinay_sajip@yahoo.co.uk>2015-10-17 15:17:52 (GMT)
commit3f445f799aeb041cada532be23d835c15a61d432 (patch)
treebd7051b2a5bb35f6bcd5f0a9b260ffcc6436a3b0
parenta83a0e23168f3d4ac730ba7cd931eb25df77e7f3 (diff)
parent277640af0f528f71c9882a30c9325cd02b10a31a (diff)
downloadcpython-3f445f799aeb041cada532be23d835c15a61d432.zip
cpython-3f445f799aeb041cada532be23d835c15a61d432.tar.gz
cpython-3f445f799aeb041cada532be23d835c15a61d432.tar.bz2
Closes #25411: Merged fix from 3.4.
-rw-r--r--Lib/logging/handlers.py18
-rw-r--r--Lib/test/test_logging.py4
-rw-r--r--Misc/NEWS3
3 files changed, 15 insertions, 10 deletions
diff --git a/Lib/logging/handlers.py b/Lib/logging/handlers.py
index 02a5fc1..b810fa9 100644
--- a/Lib/logging/handlers.py
+++ b/Lib/logging/handlers.py
@@ -965,24 +965,26 @@ class SMTPHandler(logging.Handler):
"""
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
index f5e34e7..95575bf 100644
--- a/Lib/test/test_logging.py
+++ b/Lib/test/test_logging.py
@@ -930,7 +930,7 @@ class SMTPHandlerTest(BaseTest):
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 @@ class SMTPHandlerTest(BaseTest):
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
index 3c94e4a..71009af 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -45,6 +45,9 @@ Core and Builtins
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.