Closes #25411: Improved Unicode support in SMTPHandler.

This commit is contained in:
Vinay Sajip 2015-10-17 16:13:10 +01:00
parent 4de9dae57d
commit 277640af0f
3 changed files with 17 additions and 12 deletions

View File

@ -1,4 +1,4 @@
# Copyright 2001-2013 by Vinay Sajip. All Rights Reserved. # Copyright 2001-2015 by Vinay Sajip. All Rights Reserved.
# #
# Permission to use, copy, modify, and distribute this software and its # Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose and without fee is hereby granted, # documentation for any purpose and without fee is hereby granted,
@ -18,7 +18,7 @@
Additional handlers for the logging package for Python. The core package is Additional handlers for the logging package for Python. The core package is
based on PEP 282 and comments thereto in comp.lang.python. based on PEP 282 and comments thereto in comp.lang.python.
Copyright (C) 2001-2013 Vinay Sajip. All Rights Reserved. Copyright (C) 2001-2015 Vinay Sajip. All Rights Reserved.
To use, simply 'import logging.handlers' and log away! To use, simply 'import logging.handlers' and log away!
""" """
@ -965,24 +965,26 @@ class SMTPHandler(logging.Handler):
""" """
try: try:
import smtplib import smtplib
from email.utils import formatdate from email.message import EmailMessage
import email.utils
port = self.mailport port = self.mailport
if not port: if not port:
port = smtplib.SMTP_PORT port = smtplib.SMTP_PORT
smtp = smtplib.SMTP(self.mailhost, port, timeout=self.timeout) smtp = smtplib.SMTP(self.mailhost, port, timeout=self.timeout)
msg = self.format(record) msg = EmailMessage()
msg = "From: %s\r\nTo: %s\r\nSubject: %s\r\nDate: %s\r\n\r\n%s" % ( msg['From'] = self.fromaddr
self.fromaddr, msg['To'] = ','.join(self.toaddrs)
",".join(self.toaddrs), msg['Subject'] = self.getSubject(record)
self.getSubject(record), msg['Date'] = email.utils.localtime()
formatdate(), msg) msg.set_content(self.format(record))
if self.username: if self.username:
if self.secure is not None: if self.secure is not None:
smtp.ehlo() smtp.ehlo()
smtp.starttls(*self.secure) smtp.starttls(*self.secure)
smtp.ehlo() smtp.ehlo()
smtp.login(self.username, self.password) smtp.login(self.username, self.password)
smtp.sendmail(self.fromaddr, self.toaddrs, msg) smtp.send_message(msg)
smtp.quit() smtp.quit()
except Exception: except Exception:
self.handleError(record) self.handleError(record)

View File

@ -935,7 +935,7 @@ class SMTPHandlerTest(BaseTest):
timeout=self.TIMEOUT) timeout=self.TIMEOUT)
self.assertEqual(h.toaddrs, ['you']) self.assertEqual(h.toaddrs, ['you'])
self.messages = [] self.messages = []
r = logging.makeLogRecord({'msg': 'Hello'}) r = logging.makeLogRecord({'msg': 'Hello \u2713'})
self.handled = threading.Event() self.handled = threading.Event()
h.handle(r) h.handle(r)
self.handled.wait(self.TIMEOUT) # 14314: don't wait forever self.handled.wait(self.TIMEOUT) # 14314: don't wait forever
@ -946,7 +946,7 @@ class SMTPHandlerTest(BaseTest):
self.assertEqual(mailfrom, 'me') self.assertEqual(mailfrom, 'me')
self.assertEqual(rcpttos, ['you']) self.assertEqual(rcpttos, ['you'])
self.assertIn('\nSubject: Log\n', data) self.assertIn('\nSubject: Log\n', data)
self.assertTrue(data.endswith('\n\nHello')) self.assertTrue(data.endswith('\n\nHello \u2713'))
h.close() h.close()
def process_message(self, *args): def process_message(self, *args):

View File

@ -96,6 +96,9 @@ Core and Builtins
Library Library
------- -------
- Issue #25411: Improved Unicode support in SMTPHandler through better use of
the email package. Thanks to user simon04 for the patch.
- Issue #25380: Fixed protocol for the STACK_GLOBAL opcode in - Issue #25380: Fixed protocol for the STACK_GLOBAL opcode in
pickletools.opcodes. pickletools.opcodes.