diff options
| author | Andi Albrecht <albrecht.andi@gmail.com> | 2014-05-18 09:56:55 +0200 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2014-09-10 11:14:20 -0400 |
| commit | 00535e8e6b402cab29ea3dbb7b4cc470f9839678 (patch) | |
| tree | 4b756fd4fdfdefb3a756439ed0d725b4a38f4e16 /django | |
| parent | 61f56e239f6747589046a3da9c294860e0ff1196 (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.py | 2 | ||||
| -rw-r--r-- | django/core/mail/backends/smtp.py | 10 |
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) |
