Code

send-email --smtp-server-port: allow overriding the default port
authorJunio C Hamano <gitster@pobox.com>
Wed, 26 Sep 2007 00:27:54 +0000 (17:27 -0700)
committerJunio C Hamano <gitster@pobox.com>
Wed, 26 Sep 2007 20:27:45 +0000 (13:27 -0700)
You can use --smtp-server-port option to specify a port
different from the default (typically, SMTP servers listen
to smtp port 25 and ssmtp port 465).

Users should be aware that sending auth info over non-ssl
connections may be unsafe or just may not work at all
depending on SMTP server config.

Signed-off-by: Glenn Rempe <glenn@rempe.us>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/git-send-email.txt
git-send-email.perl

index 1ec61affab506705499a80ec944b290896b993a0..3727776a0bf3196cd1d99ba4c2756767dca00567 100644 (file)
@@ -91,6 +91,11 @@ 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-server-port::
+       Specifies a port different from the default port (SMTP
+       servers typically listen to smtp port 25 and ssmtp port
+       465).
+
 --smtp-user, --smtp-pass::
        Username and password for SMTP-AUTH. Defaults are the values of
        the configuration values 'sendemail.smtpuser' and
index 4031e86b8688e62cc3a547ffd52dfc1b8234f0f4..62e1429733375356bdeb5054c3dca2581a5524fe 100755 (executable)
@@ -77,7 +77,10 @@ Options:
                   the default section.
 
    --smtp-server  If set, specifies the outgoing SMTP server to use.
-                  Defaults to localhost.
+                  Defaults to localhost.  Port number can be specified here with
+                  hostname:port format or by using --smtp-server-port option.
+
+   --smtp-server-port Specify a port on the outgoing SMTP server to connect to.
 
    --smtp-user    The username for SMTP-AUTH.
 
@@ -172,8 +175,8 @@ my ($quiet, $dry_run) = (0, 0);
 
 # Variables with corresponding config settings
 my ($thread, $chain_reply_to, $suppress_from, $signed_off_cc, $cc_cmd);
-my ($smtp_server, $smtp_authuser, $smtp_authpass, $smtp_ssl);
-my ($identity, $aliasfiletype, @alias_files);
+my ($smtp_server, $smtp_server_port, $smtp_authuser, $smtp_authpass, $smtp_ssl);
+my ($identity, $aliasfiletype, @alias_files, @smtp_host_parts);
 
 my %config_bool_settings = (
     "thread" => [\$thread, 1],
@@ -185,6 +188,7 @@ my %config_bool_settings = (
 
 my %config_settings = (
     "smtpserver" => \$smtp_server,
+    "smtpserverport" => \$smtp_server_port,
     "smtpuser" => \$smtp_authuser,
     "smtppass" => \$smtp_authpass,
     "cccmd" => \$cc_cmd,
@@ -204,6 +208,7 @@ my $rc = GetOptions("sender|from=s" => \$sender,
                    "bcc=s" => \@bcclist,
                    "chain-reply-to!" => \$chain_reply_to,
                    "smtp-server=s" => \$smtp_server,
+                   "smtp-server-port=s" => \$smtp_server_port,
                    "smtp-user=s" => \$smtp_authuser,
                    "smtp-pass=s" => \$smtp_authpass,
                    "smtp-ssl!" => \$smtp_ssl,
@@ -602,16 +607,30 @@ X-Mailer: git-send-email $gitversion
                print $sm "$header\n$message";
                close $sm or die $?;
        } else {
+
+               if (!defined $smtp_server) {
+                       die "The required SMTP server is not properly defined."
+               }
+
                if ($smtp_ssl) {
+                       $smtp_server_port ||= 465; # ssmtp
                        require Net::SMTP::SSL;
-                       $smtp ||= Net::SMTP::SSL->new( $smtp_server, Port => 465 );
+                       $smtp ||= Net::SMTP::SSL->new($smtp_server, Port => $smtp_server_port);
                }
                else {
                        require Net::SMTP;
-                       $smtp ||= Net::SMTP->new( $smtp_server );
+                       $smtp ||= Net::SMTP->new((defined $smtp_server_port)
+                                                ? "$smtp_server:$smtp_server_port"
+                                                : $smtp_server);
+               }
+
+               if (!$smtp) {
+                       die "Unable to initialize SMTP properly.  Is there something wrong with your config?";
+               }
+
+               if ((defined $smtp_authuser) && (defined $smtp_authpass)) {
+                       $smtp->auth( $smtp_authuser, $smtp_authpass ) or die $smtp->message;
                }
-               $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;