Skip to content
Snippets Groups Projects
Commit b9c3365d authored by Xavier Morel's avatar Xavier Morel
Browse files

[FIX] P3: cross-version smtplib/email changes

* SMTPLib[P3] uses a debug method on ``SMTP`` rather than a global
  ``stderr``
* email.Encoders is a deprecated & outdated (since 2006) alias for
  email.encoders
parent b5e7b7ee
No related branches found
No related tags found
No related merge requests found
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details. # Part of Odoo. See LICENSE file for full copyright and licensing details.
from email import Encoders from email import encoders
from email.charset import Charset from email.charset import Charset
from email.header import Header from email.header import Header
from email.mime.base import MIMEBase from email.mime.base import MIMEBase
...@@ -28,16 +28,16 @@ class MailDeliveryException(except_orm): ...@@ -28,16 +28,16 @@ class MailDeliveryException(except_orm):
def __init__(self, name, value): def __init__(self, name, value):
super(MailDeliveryException, self).__init__(name, value) super(MailDeliveryException, self).__init__(name, value)
# Python 3: patch SMTP's internal printer/debugger
def _print_debug(self, *args):
_logger.debug(' '.join(str(a) for a in args))
smtplib.SMTP._print_debug = _print_debug
# Python 2: replace smtplib's stderr
class WriteToLogger(object): class WriteToLogger(object):
"""debugging helper: behave as a fd and pipe to logger at the given level"""
def __init__(self, logger, level=logging.DEBUG):
self.logger = logger
self.level = level
def write(self, s): def write(self, s):
self.logger.log(self.level, s) _logger.debug(s)
smtplib.stderr = WriteToLogger()
def try_coerce_ascii(string_utf8): def try_coerce_ascii(string_utf8):
"""Attempts to decode the given utf8-encoded string """Attempts to decode the given utf8-encoded string
...@@ -159,14 +159,6 @@ class IrMailServer(models.Model): ...@@ -159,14 +159,6 @@ class IrMailServer(models.Model):
"is used. Default priority is 10 (smaller number = higher priority)") "is used. Default priority is 10 (smaller number = higher priority)")
active = fields.Boolean(default=True) active = fields.Boolean(default=True)
def __init__(self, *args, **kwargs):
# Make sure we pipe the smtplib outputs to our own DEBUG logger
if not isinstance(smtplib.stderr, WriteToLogger):
logpiper = WriteToLogger(_logger)
smtplib.stderr = logpiper
smtplib.stdout = logpiper
super(IrMailServer, self).__init__(*args, **kwargs)
@api.multi @api.multi
def name_get(self): def name_get(self):
return [(server.id, "(%s)" % server.name) for server in self] return [(server.id, "(%s)" % server.name) for server in self]
...@@ -371,7 +363,7 @@ class IrMailServer(models.Model): ...@@ -371,7 +363,7 @@ class IrMailServer(models.Model):
part.add_header('Content-Disposition', 'attachment', filename=filename_rfc2047) part.add_header('Content-Disposition', 'attachment', filename=filename_rfc2047)
part.set_payload(fcontent) part.set_payload(fcontent)
Encoders.encode_base64(part) encoders.encode_base64(part)
msg.attach(part) msg.attach(part)
return msg return msg
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment