Author: mtredinnick
Date: 2007-05-03 08:35:02 -0500 (Thu, 03 May 2007)
New Revision: 5144

Modified:
   django/trunk/django/conf/global_settings.py
   django/trunk/django/core/mail.py
   django/trunk/docs/email.txt
   django/trunk/docs/settings.txt
Log:
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.


Modified: django/trunk/django/conf/global_settings.py
===================================================================
--- django/trunk/django/conf/global_settings.py 2007-05-03 12:08:31 UTC (rev 
5143)
+++ django/trunk/django/conf/global_settings.py 2007-05-03 13:35:02 UTC (rev 
5144)
@@ -119,6 +119,7 @@
 # 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 = ()

Modified: django/trunk/django/core/mail.py
===================================================================
--- django/trunk/django/core/mail.py    2007-05-03 12:08:31 UTC (rev 5143)
+++ django/trunk/django/core/mail.py    2007-05-03 13:35:02 UTC (rev 5144)
@@ -70,15 +70,12 @@
     """
 
     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 @@
             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 @@
         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

Modified: django/trunk/docs/email.txt
===================================================================
--- django/trunk/docs/email.txt 2007-05-03 12:08:31 UTC (rev 5143)
+++ django/trunk/docs/email.txt 2007-05-03 13:35:02 UTC (rev 5144)
@@ -22,7 +22,8 @@
 
 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 @@
 .. _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()

Modified: django/trunk/docs/settings.txt
===================================================================
--- django/trunk/docs/settings.txt      2007-05-03 12:08:31 UTC (rev 5143)
+++ django/trunk/docs/settings.txt      2007-05-03 13:35:02 UTC (rev 5144)
@@ -428,6 +428,13 @@
 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
 -------------
 


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to