Browse Source

Merge branch 'mw/send-email'

* mw/send-email:
  git-send-email: Better handling of EOF
  git-send-email: SIG{TERM,INT} handlers
  git-send-email: ssh/login style password requests
maint
Junio C Hamano 17 years ago
parent
commit
e3560df69d
  1. 39
      Documentation/git-send-email.txt
  2. 94
      git-send-email.perl

39
Documentation/git-send-email.txt

@ -96,11 +96,40 @@ The --cc option must be repeated for each user you want on the cc list. @@ -96,11 +96,40 @@ The --cc option must be repeated for each user you want on the cc list.
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
'sendemail.smtppass', but see also 'sendemail.identity'.
If not set, authentication is not attempted.
--smtp-user::
Username for SMTP-AUTH. In place of this option, the following
configuration variables can be specified:
+
--
* sendemail.smtpuser
* sendemail.<identity>.smtpuser (see sendemail.identity).
--
+
However, --smtp-user always overrides these variables.
+
If a username is not specified (with --smtp-user or a
configuration variable), then authentication is not attempted.

--smtp-pass::
Password for SMTP-AUTH. The argument is optional: If no
argument is specified, then the empty string is used as
the password.
+
In place of this option, the following configuration variables
can be specified:
+
--
* sendemail.smtppass
* sendemail.<identity>.smtppass (see sendemail.identity).
--
+
However, --smtp-pass always overrides these variables.
+
Furthermore, passwords need not be specified in configuration files
or on the command line. If a username has been specified (with
--smtp-user or a configuration variable), but no password has been
specified (with --smtp-pass or a configuration variable), then the
user is prompted for a password while the input is masked for privacy.

--smtp-ssl::
If set, connects to the SMTP server using SSL.

94
git-send-email.perl

@ -24,8 +24,6 @@ use Data::Dumper; @@ -24,8 +24,6 @@ use Data::Dumper;
use Term::ANSIColor;
use Git;

$SIG{INT} = sub { print color("reset"), "\n"; exit };

package FakeTerm;
sub new {
my ($class, $reason) = @_;
@ -163,7 +161,7 @@ my $compose_filename = ".msg.$$"; @@ -163,7 +161,7 @@ my $compose_filename = ".msg.$$";

# Variables we fill in automatically, or via prompting:
my (@to,@cc,@initial_cc,@bcclist,@xh,
$initial_reply_to,$initial_subject,@files,$author,$sender,$compose,$time);
$initial_reply_to,$initial_subject,@files,$author,$sender,$smtp_authpass,$compose,$time);

my $envelope_sender;

@ -183,7 +181,7 @@ my ($quiet, $dry_run) = (0, 0); @@ -183,7 +181,7 @@ 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_server_port, $smtp_authuser, $smtp_authpass, $smtp_ssl);
my ($smtp_server, $smtp_server_port, $smtp_authuser, $smtp_ssl);
my ($identity, $aliasfiletype, @alias_files, @smtp_host_parts);
my ($no_validate);
my (@suppress_cc);
@ -209,6 +207,29 @@ my %config_settings = ( @@ -209,6 +207,29 @@ my %config_settings = (
"suppresscc" => \@suppress_cc,
);

# Handle Uncouth Termination
sub signal_handler {

# Make text normal
print color("reset"), "\n";

# SMTP password masked
system "stty echo";

# tmp files from --compose
if (-e $compose_filename) {
print "'$compose_filename' contains an intermediate version of the email you were composing.\n";
}
if (-e ($compose_filename . ".final")) {
print "'$compose_filename.final' contains the composed email.\n"
}

exit;
};

$SIG{TERM} = \&signal_handler;
$SIG{INT} = \&signal_handler;

# Begin by accumulating all the variables (defined above), that we will end up
# needing, first, from the command line:

@ -222,7 +243,7 @@ my $rc = GetOptions("sender|from=s" => \$sender, @@ -222,7 +243,7 @@ my $rc = GetOptions("sender|from=s" => \$sender,
"smtp-server=s" => \$smtp_server,
"smtp-server-port=s" => \$smtp_server_port,
"smtp-user=s" => \$smtp_authuser,
"smtp-pass=s" => \$smtp_authpass,
"smtp-pass:s" => \$smtp_authpass,
"smtp-ssl!" => \$smtp_ssl,
"identity=s" => \$identity,
"compose" => \$compose,
@ -393,9 +414,12 @@ if (@files) { @@ -393,9 +414,12 @@ if (@files) {
my $prompting = 0;
if (!defined $sender) {
$sender = $repoauthor || $repocommitter;
do {

while (1) {
$_ = $term->readline("Who should the emails appear to be from? [$sender] ");
} while (!defined $_);
last if defined $_;
print "\n";
}

$sender = $_ if ($_);
print "Emails will be sent from: ", $sender, "\n";
@ -403,10 +427,14 @@ if (!defined $sender) { @@ -403,10 +427,14 @@ if (!defined $sender) {
}

if (!@to) {
do {
$_ = $term->readline("Who should the emails be sent to? ",
"");
} while (!defined $_);


while (1) {
$_ = $term->readline("Who should the emails be sent to? ", "");
last if defined $_;
print "\n";
}

my $to = $_;
push @to, split /,/, $to;
$prompting++;
@ -428,19 +456,22 @@ sub expand_aliases { @@ -428,19 +456,22 @@ sub expand_aliases {
@bcclist = expand_aliases(@bcclist);

if (!defined $initial_subject && $compose) {
do {
$_ = $term->readline("What subject should the initial email start with? ",
$initial_subject);
} while (!defined $_);
while (1) {
$_ = $term->readline("What subject should the initial email start with? ", $initial_subject);
last if defined $_;
print "\n";
}

$initial_subject = $_;
$prompting++;
}

if ($thread && !defined $initial_reply_to && $prompting) {
do {
$_= $term->readline("Message-ID to be used as In-Reply-To for the first email? ",
$initial_reply_to);
} while (!defined $_);
while (1) {
$_= $term->readline("Message-ID to be used as In-Reply-To for the first email? ", $initial_reply_to);
last if defined $_;
print "\n";
}

$initial_reply_to = $_;
}
@ -491,9 +522,11 @@ EOT @@ -491,9 +522,11 @@ EOT
close(C);
close(C2);

do {
while (1) {
$_ = $term->readline("Send this email? (y|n) ");
} while (!defined $_);
last if defined $_;
print "\n";
}

if (uc substr($_,0,1) ne 'Y') {
cleanup_compose_files();
@ -685,9 +718,26 @@ X-Mailer: git-send-email $gitversion @@ -685,9 +718,26 @@ X-Mailer: git-send-email $gitversion
die "Unable to initialize SMTP properly. Is there something wrong with your config?";
}

if ((defined $smtp_authuser) && (defined $smtp_authpass)) {
if (defined $smtp_authuser) {

if (!defined $smtp_authpass) {

system "stty -echo";

do {
print "Password: ";
$_ = <STDIN>;
print "\n";
} while (!defined $_);

chomp($smtp_authpass = $_);

system "stty echo";
}

$auth ||= $smtp->auth( $smtp_authuser, $smtp_authpass ) or die $smtp->message;
}

$smtp->mail( $raw_from ) or die $smtp->message;
$smtp->to( @recipients ) or die $smtp->message;
$smtp->data or die $smtp->message;

Loading…
Cancel
Save