[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
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# 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.header import Header
|
||||
from email.mime.base import MIMEBase
|
||||
@@ -28,16 +28,16 @@ class MailDeliveryException(except_orm):
|
||||
def __init__(self, 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):
|
||||
"""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):
|
||||
self.logger.log(self.level, s)
|
||||
|
||||
_logger.debug(s)
|
||||
smtplib.stderr = WriteToLogger()
|
||||
|
||||
def try_coerce_ascii(string_utf8):
|
||||
"""Attempts to decode the given utf8-encoded string
|
||||
@@ -159,14 +159,6 @@ class IrMailServer(models.Model):
|
||||
"is used. Default priority is 10 (smaller number = higher priority)")
|
||||
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
|
||||
def name_get(self):
|
||||
return [(server.id, "(%s)" % server.name) for server in self]
|
||||
@@ -371,7 +363,7 @@ class IrMailServer(models.Model):
|
||||
part.add_header('Content-Disposition', 'attachment', filename=filename_rfc2047)
|
||||
|
||||
part.set_payload(fcontent)
|
||||
Encoders.encode_base64(part)
|
||||
encoders.encode_base64(part)
|
||||
msg.attach(part)
|
||||
return msg
|
||||
|
||||
|
||||
Reference in New Issue
Block a user