summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2007-05-03 13:35:02 +0000
committerMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2007-05-03 13:35:02 +0000
commit7a84ad93e69faf7a14342ebb4da1f6be265f1fe0 (patch)
treea9c4992c5a152c37f9a07f952e0aceb7a7a3b73a
parent21a2ca6a2121bc96edef4212f7ce79e8bb0a8062 (diff)
Fixed #2897 -- Added support for TLS connections to email handling. This means
servers like Google's SMTP server can now be used for admin emails. git-svn-id: http://code.djangoproject.com/svn/django/trunk@5144 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/conf/global_settings.py1
-rw-r--r--django/core/mail.py23
-rw-r--r--docs/email.txt4
-rw-r--r--docs/settings.txt7
4 files changed, 25 insertions, 10 deletions
diff --git a/django/conf/global_settings.py b/django/conf/global_settings.py
index 521caedbd0..61751db8cd 100644
--- a/django/conf/global_settings.py
+++ b/django/conf/global_settings.py
@@ -119,6 +119,7 @@ EMAIL_PORT = 25
# Optional SMTP authentication information for EMAIL_HOST.
EMAIL_HOST_USER = ''
EMAIL_HOST_PASSWORD = ''
+EMAIL_USE_TLS = False
# List of strings representing installed apps.
INSTALLED_APPS = ()
diff --git a/django/core/mail.py b/django/core/mail.py
index 8fcf26fe03..4c40acda8c 100644
--- a/django/core/mail.py
+++ b/django/core/mail.py
@@ -70,15 +70,12 @@ class SMTPConnection(object):
"""
def __init__(self, host=None, port=None, username=None, password=None,
- fail_silently=False):
- if host is None:
- self.host = settings.EMAIL_HOST
- if port is None:
- self.port = settings.EMAIL_PORT
- if username is None:
- self.username = settings.EMAIL_HOST_USER
- if password is None:
- self.password = settings.EMAIL_HOST_PASSWORD
+ use_tls=None, fail_silently=False):
+ self.host = host or settings.EMAIL_HOST
+ self.port = (port is not None) and port or settings.EMAIL_PORT
+ self.username = username or settings.EMAIL_HOST_USER
+ self.password = password or settings.EMAIL_HOST_PASSWORD
+ self.use_tls = (use_tls is not None) and use_tls or settings.EMAIL_USE_TLS
self.fail_silently = fail_silently
self.connection = None
@@ -92,6 +89,10 @@ class SMTPConnection(object):
return False
try:
self.connection = smtplib.SMTP(self.host, self.port)
+ if self.use_tls:
+ self.connection.ehlo()
+ self.connection.starttls()
+ self.connection.ehlo()
if self.username and self.password:
self.connection.login(self.username, self.password)
return True
@@ -104,6 +105,10 @@ class SMTPConnection(object):
try:
try:
self.connection.quit()
+ except socket.sslerror:
+ # This happens when calling quit() on a TLS connection
+ # sometimes.
+ self.connection.close()
except:
if self.fail_silently:
return
diff --git a/docs/email.txt b/docs/email.txt
index 74127526dd..56a552bdb7 100644
--- a/docs/email.txt
+++ b/docs/email.txt
@@ -22,7 +22,8 @@ In two lines::
Mail will be sent using the SMTP host and port specified in the `EMAIL_HOST`_
and `EMAIL_PORT`_ settings. The `EMAIL_HOST_USER`_ and `EMAIL_HOST_PASSWORD`_
-settings, if set, will be used to authenticate to the SMTP server.
+settings, if set, will be used to authenticate to the SMTP server and the
+`EMAIL_USE_TLS`_ settings will control whether a secure connection is used.
.. note::
@@ -34,6 +35,7 @@ settings, if set, will be used to authenticate to the SMTP server.
.. _EMAIL_PORT: ../settings/#email-port
.. _EMAIL_HOST_USER: ../settings/#email-host-user
.. _EMAIL_HOST_PASSWORD: ../settings/#email-host-password
+.. _EMAIL_USE_TLS: ../settings/#email-use-tls
send_mail()
diff --git a/docs/settings.txt b/docs/settings.txt
index 042347ccdb..58d590f7c2 100644
--- a/docs/settings.txt
+++ b/docs/settings.txt
@@ -428,6 +428,13 @@ Subject-line prefix for e-mail messages sent with ``django.core.mail.mail_admins
or ``django.core.mail.mail_managers``. You'll probably want to include the
trailing space.
+EMAIL_USE_TLS
+-------------
+
+Default: ``False``
+
+Whether to use a TLS (secure) connection when talking to the SMTP server.
+
FIXTURE_DIRS
-------------