git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Douglas Stockwell <douglas.stockwell@gmail.com>
To: git@vger.kernel.org
Cc: Douglas Stockwell <doug@11011.net>
Subject: [PATCH] send-email: Add support for SSL and SMTP-AUTH
Date: Sun,  2 Sep 2007 12:14:45 +0900	[thread overview]
Message-ID: <11887028854022-git-send-email-doug@11011.net> (raw)

Allows username and password to be given using --smtp-authuser
and --smtp-authpass. SSL use is flagged by --smtp-ssl. These are
backed by corresponding defaults in the git configuration file.

Signed-off-by: Douglas Stockwell <doug@11011.net>
---
 Documentation/git-send-email.txt |   21 +++++++++++++++-
 git-send-email.perl              |   50 ++++++++++++++++++++++++++++++-------
 2 files changed, 60 insertions(+), 11 deletions(-)

diff --git a/Documentation/git-send-email.txt b/Documentation/git-send-email.txt
index 8231286..471c268 100644
--- a/Documentation/git-send-email.txt
+++ b/Documentation/git-send-email.txt
@@ -79,6 +79,16 @@ The --cc option must be repeated for each user you want on the cc list.
 	`/usr/lib/sendmail` if such program is available, or
 	`localhost` otherwise.
 
+--smtp-authuser, --smtp-authpass::
+	Username and password for SMTP-AUTH. Defaults are the values of
+	the configuration values 'sendemail.smtpauthuser' and
+	'sendemail.smtpauthpass'. If not set, authentication is not attempted.
+
+--smtp-ssl::
+	If set, connects to the SMTP server using SSL.
+	Default is the value of the 'sendemail.smtpssl' configuration value;
+	if that is unspecified, does not use SSL.
+
 --subject::
 	Specify the initial subject of the email thread.
 	Only necessary if --compose is also set.  If --compose
@@ -132,7 +142,16 @@ sendemail.chainreplyto::
 	parameter.
 
 sendemail.smtpserver::
-	Default smtp server to use.
+	Default SMTP server to use.
+
+sendemail.smtpauthuser::
+	Default SMTP-AUTH username.
+
+sendemail.smtpauthpass::
+	Default SMTP-AUTH password.
+
+sendemail.smtpssl::
+	Boolean value specifying the default to the '--smtp-ssl' parameter.
 
 Author
 ------
diff --git a/git-send-email.perl b/git-send-email.perl
index f1a8855..38e8395 100755
--- a/git-send-email.perl
+++ b/git-send-email.perl
@@ -73,6 +73,12 @@ Options:
    --smtp-server  If set, specifies the outgoing SMTP server to use.
                   Defaults to localhost.
 
+   --smtp-authuser The username for SMTP-AUTH.
+
+   --smtp-authpass The password for SMTP-AUTH.
+
+   --smtp-ssl     If set, connects to the SMTP server using SSL.
+
    --suppress-from Suppress sending emails to yourself if your address
                   appears in a From: line. Defaults to off.
 
@@ -142,7 +148,6 @@ my $compose_filename = ".msg.$$";
 my (@to,@cc,@initial_cc,@bcclist,@xh,
 	$initial_reply_to,$initial_subject,@files,$author,$sender,$compose,$time);
 
-my $smtp_server;
 my $envelope_sender;
 
 # Example reply to:
@@ -161,17 +166,34 @@ my ($quiet, $dry_run) = (0, 0);
 
 # Variables with corresponding config settings
 my ($thread, $chain_reply_to, $suppress_from, $signed_off_cc);
+my ($smtp_server, $smtp_authuser, $smtp_authpass, $smtp_ssl);
 
-my %config_settings = (
+my %config_bool_settings = (
     "thread" => [\$thread, 1],
     "chainreplyto" => [\$chain_reply_to, 1],
     "suppressfrom" => [\$suppress_from, 0],
     "signedoffcc" => [\$signed_off_cc, 1],
+    "smtpssl" => [\$smtp_ssl, 0]
+);
+
+my %config_string_settings = (
+    "smtpserver" => [\$smtp_server, undef],
+    "smtpauthuser" => [\$smtp_authuser, undef],
+    "smtpauthpass" => [\$smtp_authpass, undef],
 );
 
-foreach my $setting (keys %config_settings) {
+foreach my $setting (keys %config_bool_settings) {
     my $config = $repo->config_bool("sendemail.$setting");
-    ${$config_settings{$setting}->[0]} = (defined $config) ? $config : $config_settings{$setting}->[1];
+    ${$config_bool_settings{$setting}->[0]} = (defined $config)
+        ? $config
+        : $config_bool_settings{$setting}->[1];
+}
+
+foreach my $setting (keys %config_string_settings) {
+    my $config = $repo->config("sendemail.$setting");
+    ${$config_string_settings{$setting}->[0]} = (defined $config)
+        ? $config
+        : $config_string_settings{$setting}->[1];
 }
 
 @bcclist = $repo->config('sendemail.bcc');
@@ -190,6 +212,9 @@ my $rc = GetOptions("sender|from=s" => \$sender,
 		    "bcc=s" => \@bcclist,
 		    "chain-reply-to!" => \$chain_reply_to,
 		    "smtp-server=s" => \$smtp_server,
+		    "smtp-authuser=s" => \$smtp_authuser,
+		    "smtp-authpass=s" => \$smtp_authpass,
+		    "smtp-ssl!" => \$smtp_ssl,
 		    "compose" => \$compose,
 		    "quiet" => \$quiet,
 		    "suppress-from!" => \$suppress_from,
@@ -315,10 +340,7 @@ if ($thread && !defined $initial_reply_to && $prompting) {
 	$initial_reply_to =~ s/(^\s+|\s+$)//g;
 }
 
-if (!$smtp_server) {
-	$smtp_server = $repo->config('sendemail.smtpserver');
-}
-if (!$smtp_server) {
+if (!defined $smtp_server) {
 	foreach (qw( /usr/sbin/sendmail /usr/lib/sendmail )) {
 		if (-x $_) {
 			$smtp_server = $_;
@@ -548,8 +570,16 @@ X-Mailer: git-send-email $gitversion
 		print $sm "$header\n$message";
 		close $sm or die $?;
 	} else {
-		require Net::SMTP;
-		$smtp ||= Net::SMTP->new( $smtp_server );
+		if ($smtp_ssl) {
+			require Net::SMTP::SSL;
+			$smtp ||= Net::SMTP::SSL->new( $smtp_server, Port => 465 );
+		}
+		else {
+			require Net::SMTP;
+			$smtp ||= Net::SMTP->new( $smtp_server );
+		}
+		$smtp->auth( $smtp_authuser, $smtp_authpass )
+			or die $smtp->message if (defined $smtp_authuser);
 		$smtp->mail( $raw_from ) or die $smtp->message;
 		$smtp->to( @recipients ) or die $smtp->message;
 		$smtp->data or die $smtp->message;
-- 
1.5.3.rc7.17.gd77cc

             reply	other threads:[~2007-09-02  3:15 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2007-09-02  3:14 Douglas Stockwell [this message]
2007-09-02  7:55 ` [PATCH] send-email: Add support for SSL and SMTP-AUTH Junio C Hamano
2007-09-02  9:43   ` Wincent Colaiuta
2007-09-02 11:06   ` David Symonds
2007-09-02 12:32   ` Johannes Schindelin
  -- strict thread matches above, loose matches on Subject: below --
2007-09-02 18:06 Douglas Stockwell
2007-09-03  6:48 ` Wincent Colaiuta
2007-09-03  7:58 ` Junio C Hamano

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=11887028854022-git-send-email-doug@11011.net \
    --to=douglas.stockwell@gmail.com \
    --cc=doug@11011.net \
    --cc=git@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).