Fixed #23461 -- Added EMAIL_TIMEOUT setting

This commit is contained in:
José Padilla 2014-09-12 22:46:22 -04:00 committed by Tim Graham
parent 0ae79014c0
commit 5472d18e31
6 changed files with 34 additions and 26 deletions

View File

@ -196,6 +196,7 @@ EMAIL_USE_TLS = False
EMAIL_USE_SSL = False
EMAIL_SSL_CERTFILE = None
EMAIL_SSL_KEYFILE = None
EMAIL_TIMEOUT = None
# List of strings representing installed apps.
INSTALLED_APPS = ()

View File

@ -24,7 +24,7 @@ class EmailBackend(BaseEmailBackend):
self.password = settings.EMAIL_HOST_PASSWORD if password is None else password
self.use_tls = settings.EMAIL_USE_TLS if use_tls is None else use_tls
self.use_ssl = settings.EMAIL_USE_SSL if use_ssl is None else use_ssl
self.timeout = timeout
self.timeout = settings.EMAIL_TIMEOUT if timeout is None else timeout
self.ssl_keyfile = settings.EMAIL_SSL_KEYFILE if ssl_keyfile is None else ssl_keyfile
self.ssl_certfile = settings.EMAIL_SSL_CERTFILE if ssl_certfile is None else ssl_certfile
if self.use_ssl and self.use_tls:

View File

@ -1266,6 +1266,18 @@ connection. Please refer to the documentation of Python's
:func:`python:ssl.wrap_socket` function for details on how the certificate chain
file and private key file are handled.
.. setting:: EMAIL_TIMEOUT
EMAIL_TIMEOUT
-------------
.. versionadded:: 1.8
Default: ``None``
Specifies a timeout in seconds for blocking operations like the connection
attempt.
.. setting:: FILE_CHARSET
FILE_CHARSET
@ -3089,6 +3101,7 @@ Email
* :setting:`EMAIL_SSL_CERTFILE`
* :setting:`EMAIL_SSL_KEYFILE`
* :setting:`EMAIL_SUBJECT_PREFIX`
* :setting*`EMAIL_TIMEOUT`
* :setting:`EMAIL_USE_TLS`
* :setting:`MANAGERS`
* :setting:`SERVER_EMAIL`

View File

@ -154,6 +154,9 @@ Email
authentication with the :setting:`EMAIL_SSL_CERTFILE` and
:setting:`EMAIL_SSL_KEYFILE` settings.
* The SMTP :class:`~django.core.mail.backends.smtp.EmailBackend` now supports
setting the ``timeout`` parameter with the :setting:`EMAIL_TIMEOUT` setting.
File Storage
^^^^^^^^^^^^

View File

@ -451,41 +451,27 @@ SMTP backend
The server address and authentication credentials are set in the
:setting:`EMAIL_HOST`, :setting:`EMAIL_PORT`, :setting:`EMAIL_HOST_USER`,
:setting:`EMAIL_HOST_PASSWORD`, :setting:`EMAIL_USE_TLS`,
:setting:`EMAIL_USE_SSL`, :setting:`EMAIL_SSL_CERTFILE` and
:setting:`EMAIL_SSL_KEYFILE` settings in your settings file.
:setting:`EMAIL_USE_SSL`, :setting:`EMAIL_TIMEOUT`,
:setting:`EMAIL_SSL_CERTFILE` and :setting:`EMAIL_SSL_KEYFILE` settings
in your settings file.
The SMTP backend is the default configuration inherited by Django. If you
want to specify it explicitly, put the following in your settings::
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
Here is an attribute which doesn't have a corresponding setting like the
others described above:
.. versionadded:: 1.7
.. attribute:: timeout
.. versionadded:: 1.7
This backend contains a ``timeout`` parameter, which can be set with
the following sample code::
from django.core.mail.backends import smtp
class MyEmailBackend(smtp.EmailBackend):
def __init__(self, *args, **kwargs):
kwargs.setdefault('timeout', 42)
super(MyEmailBackend, self).__init__(*args, **kwargs)
Then point the :setting:`EMAIL_BACKEND` setting at your custom backend as
described above.
If unspecified, the default ``timeout`` will be the one provided by
:func:`socket.getdefaulttimeout()`, which defaults to ``None`` (no timeout).
The ``timeout`` parameter was added. If unspecified, the default
``timeout`` will be the one provided by
:func:`socket.getdefaulttimeout()`, which defaults to ``None`` (no
timeout).
.. versionchanged:: 1.8
The ``ssl_keyfile`` and ``ssl_certfile`` parameters and
corresponding settings were added.
The ``ssl_keyfile``, and ``ssl_certfile`` parameters and corresponding
settings were added. The ability to customize ``timeout`` using
a setting (:setting:`EMAIL_TIMEOUT`) was added.
.. _topic-email-console-backend:

View File

@ -1033,3 +1033,8 @@ class SMTPBackendTests(BaseEmailBackendTests, SimpleTestCase):
self.assertEqual(myemailbackend.timeout, 42)
self.assertEqual(myemailbackend.connection.timeout, 42)
myemailbackend.close()
@override_settings(EMAIL_TIMEOUT=10)
def test_email_timeout_override_settings(self):
backend = smtp.EmailBackend()
self.assertEqual(backend.timeout, 10)