Added the option "smtp-ssl-protocol" to make STARTTLS work on Python 3.3+
authorThiago Coutinho <root@thiagoc.net>
Fri, 13 Jun 2014 21:37:12 +0000 (18:37 -0300)
committerThiago Coutinho <root@thiagoc.net>
Fri, 13 Jun 2014 21:39:10 +0000 (18:39 -0300)
Signed-off-by: Thiago Coutinho <root@thiagoc.net>
rss2email/config.py
rss2email/email.py

index 40c4c0f9c91fbf10d93136d124ea534c7678d8f7..78c4fb19fa5cd9a295a02207cec83165fc6dac74 100644 (file)
@@ -191,6 +191,7 @@ CONFIG['DEFAULT'] = _collections.OrderedDict((
         ('smtp-password', 'password'),  # password for SMTP AUTH
         ('smtp-server', 'smtp.yourisp.net:25'),
         ('smtp-ssl', str(False)),       # Connect to the SMTP server using SSL
+        ('smtp-ssl-protocol', 'SSLv3'), # TLS/SSL version to use on STARTTLS when not using 'smtp-ssl'
         # IMAP configuration
         ('imap-auth', str(False)),      # set to True to use IMAP auth.
         ('imap-username', 'username'),  # username for IMAP authentication
index ef798f76250eae3dc997c8a59a28f050d0e3b7c7..bee9e0364f8b9c3a351267b4b5e6509b25c13e70 100644 (file)
@@ -34,6 +34,7 @@ from email.utils import parseaddr as _parseaddr
 import imaplib as _imaplib
 import io as _io
 import smtplib as _smtplib
+import ssl as _ssl
 import subprocess as _subprocess
 import sys as _sys
 import time as _time
@@ -158,7 +159,13 @@ def smtp_send(sender, recipient, message, config=None, section='DEFAULT'):
         password = config.get(section, 'smtp-password')
         try:
             if not ssl:
-                smtp.starttls()
+                protocol_name = config.get(section, 'smtp-ssl-protocol')
+                protocol = getattr(_ssl, 'PROTOCOL_{}'.format(protocol_name))
+                try:
+                    smtp.starttls(context=_ssl.SSLContext(protocol=protocol))
+                except TypeError:
+                    # Python 3.2 or earlier
+                    smtp.starttls()
             smtp.login(username, password)
         except KeyboardInterrupt:
             raise