Merge pull request #61 from lavr/issue-60
More specific error in SMTPBackend.send. Fixes #60
This commit is contained in:
commit
7a071504c0
|
@ -7,7 +7,6 @@ python:
|
|||
- "2.7"
|
||||
- "3.3"
|
||||
- "3.4"
|
||||
- "pypy"
|
||||
|
||||
script: py.test --cov emails
|
||||
|
||||
|
|
|
@ -1,14 +1,15 @@
|
|||
# encoding: utf-8
|
||||
from __future__ import unicode_literals
|
||||
|
||||
__all__ = ['SMTPBackend', ]
|
||||
|
||||
import smtplib
|
||||
import logging
|
||||
from functools import wraps
|
||||
from ..response import SMTPResponse
|
||||
from .client import SMTPClientWithResponse, SMTPClientWithResponse_SSL
|
||||
from ...utils import DNS_NAME
|
||||
from .exceptions import SMTPConnectNetworkError
|
||||
|
||||
|
||||
__all__ = ['SMTPBackend']
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
@ -85,16 +86,20 @@ class SMTPBackend:
|
|||
|
||||
def _send(self, **kwargs):
|
||||
|
||||
response = None
|
||||
try:
|
||||
client = self.get_client()
|
||||
except (IOError, smtplib.SMTPException) as exc:
|
||||
logger.exception("Error connecting smtp server")
|
||||
except IOError as exc:
|
||||
response = self.make_response(exception=SMTPConnectNetworkError.from_ioerror(exc))
|
||||
except smtplib.SMTPException as exc:
|
||||
response = self.make_response(exception=exc)
|
||||
|
||||
if response:
|
||||
if not self.fail_silently:
|
||||
response.raise_if_needed()
|
||||
return response
|
||||
|
||||
return client.sendmail(**kwargs)
|
||||
else:
|
||||
return client.sendmail(**kwargs)
|
||||
|
||||
def sendmail(self, from_addr, to_addrs, msg, mail_options=None, rcpt_options=None):
|
||||
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
# encoding: utf-8
|
||||
from __future__ import unicode_literals
|
||||
import socket
|
||||
|
||||
|
||||
class SMTPConnectNetworkError(IOError):
|
||||
"""Network error during connection establishment."""
|
||||
|
||||
@classmethod
|
||||
def from_ioerror(cls, exc):
|
||||
o = cls()
|
||||
o.errno = exc.errno
|
||||
o.filename = exc.filename
|
||||
o.strerror = exc.strerror
|
||||
return o
|
|
@ -169,7 +169,6 @@ def test_external_urls():
|
|||
|
||||
success = 0
|
||||
for url in [
|
||||
'https://github.com/lavr/python-emails',
|
||||
'http://yandex.com',
|
||||
'http://www.smashingmagazine.com/'
|
||||
]:
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
--requirement=base.txt
|
||||
--requirement=tests-base.txt
|
||||
|
||||
django
|
||||
django<1.9
|
||||
|
|
Reference in New Issue