{"thread":{"id":"9413","subject":"[PATCH] Add support for SMTP over Transport Layer Security (TLS)","startedAt":"2007-08-07T01:16:43Z","lastAt":"2007-08-07T01:16:43Z","messageCount":1,"participants":["Pavel Roskin"],"isPatch":true,"patchVersion":1,"patchTotal":null},"messages":[{"id":"50064","messageId":"20070807011643.20454.8122.stgit@gx.roinet.com","threadId":"9413","inReplyTo":null,"subject":"[PATCH] Add support for SMTP over Transport Layer Security (TLS)","fromName":"Pavel Roskin","fromEmail":"proski@gnu.org","sentAt":"2007-08-07T01:16:43Z","receivedAt":"2007-08-07T01:16:43Z","isPatch":true,"sender":{"key":"proski@gnu.org","avatar":null},"body":"Signed-off-by: Pavel Roskin <proski@gnu.org>\n---\n\n examples/gitconfig     |    1 +\n stgit/commands/mail.py |   22 +++++++++++++++++-----\n 2 files changed, 18 insertions(+), 5 deletions(-)\n\ndiff --git a/examples/gitconfig b/examples/gitconfig\nindex bbb943f..3abbe6a 100644\n--- a/examples/gitconfig\n+++ b/examples/gitconfig\n@@ -21,6 +21,7 @@\n \t#smtpserver = localhost:25\n \t#smtpuser = username\n \t#smtppassword = password\n+\t#smtptls = no\n \n \t# delay between messages in seconds (defaults to 5)\n \t#smtpdelay = 5\ndiff --git a/stgit/commands/mail.py b/stgit/commands/mail.py\nindex cb8dc74..7ed5c27 100644\n--- a/stgit/commands/mail.py\n+++ b/stgit/commands/mail.py\n@@ -15,7 +15,7 @@ along with this program; if not, write to the Free Software\n Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n \"\"\"\n \n-import sys, os, re, time, datetime, smtplib\n+import sys, os, re, time, datetime, socket, smtplib\n import email, email.Utils, email.Header\n from optparse import OptionParser, make_option\n \n@@ -53,7 +53,8 @@ replies to a different e-mail by using the '--refid' option.\n \n SMTP authentication is also possible with '--smtp-user' and\n '--smtp-password' options, also available as configuration settings:\n-'smtpuser' and 'smtppassword'.\n+'smtpuser' and 'smtppassword'. TLS encryption can be enabled by\n+'--smtp-tls' option and 'smtptls' setting.\n \n The patch e-mail template accepts the following variables:\n \n@@ -121,6 +122,9 @@ options = [make_option('-a', '--all',\n                        help = 'username for SMTP authentication'),\n            make_option('-p', '--smtp-password', metavar = 'PASSWORD',\n                        help = 'username for SMTP authentication'),\n+           make_option('-T', '--smtp-tls',\n+                       help = 'use SMTP with TLS encryption',\n+                       action = 'store_true'),\n            make_option('-b', '--branch',\n                        help = 'use BRANCH instead of the default one'),\n            make_option('-O', '--diff-opts',\n@@ -165,7 +169,7 @@ def __parse_addresses(msg):\n     return (from_addr_list[0], to_addr_list)\n \n def __send_message(smtpserver, from_addr, to_addr_list, msg, sleep,\n-                   smtpuser, smtppassword):\n+                   smtpuser, smtppassword, use_tls):\n     \"\"\"Send the message using the given SMTP server\n     \"\"\"\n     try:\n@@ -177,6 +181,11 @@ def __send_message(smtpserver, from_addr, to_addr_list, msg, sleep,\n     try:\n         if smtpuser and smtppassword:\n             s.ehlo()\n+            if use_tls:\n+                if not hasattr(socket, 'ssl'):\n+                    raise CmdException,  \"cannot use TLS - no SSL support in Python\"\n+                s.starttls()\n+                s.ehlo()\n             s.login(smtpuser, smtppassword)\n \n         result = s.sendmail(from_addr, to_addr_list, msg)\n@@ -479,11 +488,14 @@ def func(parser, options, args):\n \n     smtppassword = options.smtp_password or config.get('stgit.smtppassword')\n     smtpuser = options.smtp_user or config.get('stgit.smtpuser')\n+    smtpusetls = options.smtp_tls or config.get('stgit.smtptls') == 'yes'\n \n     if (smtppassword and not smtpuser):\n         raise CmdException, 'SMTP password supplied, username needed'\n     if (smtpuser and not smtppassword):\n         raise CmdException, 'SMTP username supplied, password needed'\n+    if (smtpusetls and not smtpuser):\n+        raise CmdException, 'SMTP over TLS requested, username needed'\n \n     total_nr = len(patches)\n     if total_nr == 0:\n@@ -527,7 +539,7 @@ def func(parser, options, args):\n         else:\n             out.start('Sending the cover message')\n             __send_message(smtpserver, from_addr, to_addr_list, msg_string,\n-                           sleep, smtpuser, smtppassword)\n+                           sleep, smtpuser, smtppassword, smtpusetls)\n             out.done()\n \n     # send the patches\n@@ -555,5 +567,5 @@ def func(parser, options, args):\n         else:\n             out.start('Sending patch \"%s\"' % p)\n             __send_message(smtpserver, from_addr, to_addr_list, msg_string,\n-                           sleep, smtpuser, smtppassword)\n+                           sleep, smtpuser, smtppassword, smtpusetls)\n             out.done()\n"}]}