summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorAndi Albrecht <albrecht.andi@gmail.com>2014-05-18 09:56:55 +0200
committerTim Graham <timograham@gmail.com>2014-09-10 11:14:20 -0400
commit00535e8e6b402cab29ea3dbb7b4cc470f9839678 (patch)
tree4b756fd4fdfdefb3a756439ed0d725b4a38f4e16 /django
parent61f56e239f6747589046a3da9c294860e0ff1196 (diff)
Fixed #20743 -- Added support for keyfile/certfile in SMTP connections.
Thanks jwmayfield, serg.partizan, and Wojciech Banaƛ for work on the patch.
Diffstat (limited to 'django')
-rw-r--r--django/conf/global_settings.py2
-rw-r--r--django/core/mail/backends/smtp.py10
2 files changed, 11 insertions, 1 deletions
diff --git a/django/conf/global_settings.py b/django/conf/global_settings.py
index 2522337f29..7f0a1471b1 100644
--- a/django/conf/global_settings.py
+++ b/django/conf/global_settings.py
@@ -194,6 +194,8 @@ EMAIL_HOST_USER = ''
EMAIL_HOST_PASSWORD = ''
EMAIL_USE_TLS = False
EMAIL_USE_SSL = False
+EMAIL_SSL_CERTFILE = None
+EMAIL_SSL_KEYFILE = None
# List of strings representing installed apps.
INSTALLED_APPS = ()
diff --git a/django/core/mail/backends/smtp.py b/django/core/mail/backends/smtp.py
index dc6afb0a81..b3b23027f1 100644
--- a/django/core/mail/backends/smtp.py
+++ b/django/core/mail/backends/smtp.py
@@ -15,6 +15,7 @@ class EmailBackend(BaseEmailBackend):
"""
def __init__(self, host=None, port=None, username=None, password=None,
use_tls=None, fail_silently=False, use_ssl=None, timeout=None,
+ ssl_keyfile=None, ssl_certfile=None,
**kwargs):
super(EmailBackend, self).__init__(fail_silently=fail_silently)
self.host = host or settings.EMAIL_HOST
@@ -24,6 +25,8 @@ class EmailBackend(BaseEmailBackend):
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.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:
raise ValueError(
"EMAIL_USE_TLS/EMAIL_USE_SSL are mutually exclusive, so only set "
@@ -46,6 +49,11 @@ class EmailBackend(BaseEmailBackend):
connection_params = {'local_hostname': DNS_NAME.get_fqdn()}
if self.timeout is not None:
connection_params['timeout'] = self.timeout
+ if self.use_ssl:
+ connection_params.update({
+ 'keyfile': self.ssl_keyfile,
+ 'certfile': self.ssl_certfile,
+ })
try:
self.connection = connection_class(self.host, self.port, **connection_params)
@@ -53,7 +61,7 @@ class EmailBackend(BaseEmailBackend):
# non-secure connections.
if not self.use_ssl and self.use_tls:
self.connection.ehlo()
- self.connection.starttls()
+ self.connection.starttls(keyfile=self.ssl_keyfile, certfile=self.ssl_certfile)
self.connection.ehlo()
if self.username and self.password:
self.connection.login(self.username, self.password)