зеркало из https://github.com/microsoft/git.git
Merge branch 'ew/send-email'
* ew/send-email: send-email: quiet some warnings, reject invalid addresses send-email: allow sendmail binary to be used instead of SMTP
This commit is contained in:
Коммит
63166cd64f
|
@ -40,7 +40,8 @@ my $compose_filename = ".msg.$$";
|
||||||
my (@to,@cc,@initial_cc,$initial_reply_to,$initial_subject,@files,$from,$compose,$time);
|
my (@to,@cc,@initial_cc,$initial_reply_to,$initial_subject,@files,$from,$compose,$time);
|
||||||
|
|
||||||
# Behavior modification variables
|
# Behavior modification variables
|
||||||
my ($chain_reply_to, $smtp_server, $quiet, $suppress_from, $no_signed_off_cc) = (1, "localhost", 0, 0, 0);
|
my ($chain_reply_to, $quiet, $suppress_from, $no_signed_off_cc) = (1, 0, 0, 0);
|
||||||
|
my $smtp_server;
|
||||||
|
|
||||||
# Example reply to:
|
# Example reply to:
|
||||||
#$initial_reply_to = ''; #<20050203173208.GA23964@foobar.com>';
|
#$initial_reply_to = ''; #<20050203173208.GA23964@foobar.com>';
|
||||||
|
@ -179,8 +180,14 @@ if (!defined $initial_reply_to && $prompting) {
|
||||||
$initial_reply_to =~ s/(^\s+|\s+$)//g;
|
$initial_reply_to =~ s/(^\s+|\s+$)//g;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!defined $smtp_server) {
|
if (!$smtp_server) {
|
||||||
$smtp_server = "localhost";
|
foreach (qw( /usr/sbin/sendmail /usr/lib/sendmail )) {
|
||||||
|
if (-x $_) {
|
||||||
|
$smtp_server = $_;
|
||||||
|
last;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$smtp_server ||= 'localhost'; # could be 127.0.0.1, too... *shrug*
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($compose) {
|
if ($compose) {
|
||||||
|
@ -300,6 +307,10 @@ our ($message_id, $cc, %mail, $subject, $reply_to, $message);
|
||||||
|
|
||||||
sub extract_valid_address {
|
sub extract_valid_address {
|
||||||
my $address = shift;
|
my $address = shift;
|
||||||
|
|
||||||
|
# check for a local address:
|
||||||
|
return $address if ($address =~ /^([\w\-]+)$/);
|
||||||
|
|
||||||
if ($have_email_valid) {
|
if ($have_email_valid) {
|
||||||
return Email::Valid->address($address);
|
return Email::Valid->address($address);
|
||||||
} else {
|
} else {
|
||||||
|
@ -358,26 +369,39 @@ X-Mailer: git-send-email $gitversion
|
||||||
";
|
";
|
||||||
$header .= "In-Reply-To: $reply_to\n" if $reply_to;
|
$header .= "In-Reply-To: $reply_to\n" if $reply_to;
|
||||||
|
|
||||||
$smtp ||= Net::SMTP->new( $smtp_server );
|
if ($smtp_server =~ m#^/#) {
|
||||||
$smtp->mail( $from ) or die $smtp->message;
|
my $pid = open my $sm, '|-';
|
||||||
$smtp->to( @recipients ) or die $smtp->message;
|
defined $pid or die $!;
|
||||||
$smtp->data or die $smtp->message;
|
if (!$pid) {
|
||||||
$smtp->datasend("$header\n$message") or die $smtp->message;
|
exec($smtp_server,'-i',@recipients) or die $!;
|
||||||
$smtp->dataend() or die $smtp->message;
|
}
|
||||||
$smtp->ok or die "Failed to send $subject\n".$smtp->message;
|
print $sm "$header\n$message";
|
||||||
|
close $sm or die $?;
|
||||||
|
} else {
|
||||||
|
$smtp ||= Net::SMTP->new( $smtp_server );
|
||||||
|
$smtp->mail( $from ) or die $smtp->message;
|
||||||
|
$smtp->to( @recipients ) or die $smtp->message;
|
||||||
|
$smtp->data or die $smtp->message;
|
||||||
|
$smtp->datasend("$header\n$message") or die $smtp->message;
|
||||||
|
$smtp->dataend() or die $smtp->message;
|
||||||
|
$smtp->ok or die "Failed to send $subject\n".$smtp->message;
|
||||||
|
}
|
||||||
if ($quiet) {
|
if ($quiet) {
|
||||||
printf "Sent %s\n", $subject;
|
printf "Sent %s\n", $subject;
|
||||||
} else {
|
} else {
|
||||||
print "OK. Log says:
|
print "OK. Log says:\nDate: $date\n";
|
||||||
Date: $date
|
if ($smtp) {
|
||||||
Server: $smtp_server Port: 25
|
print "Server: $smtp_server\n";
|
||||||
From: $from
|
} else {
|
||||||
Subject: $subject
|
print "Sendmail: $smtp_server\n";
|
||||||
Cc: $cc
|
}
|
||||||
To: $to
|
print "From: $from\nSubject: $subject\nCc: $cc\nTo: $to\n\n";
|
||||||
|
if ($smtp) {
|
||||||
Result: ", $smtp->code, ' ', ($smtp->message =~ /\n([^\n]+\n)$/s), "\n";
|
print "Result: ", $smtp->code, ' ',
|
||||||
|
($smtp->message =~ /\n([^\n]+\n)$/s), "\n";
|
||||||
|
} else {
|
||||||
|
print "Result: OK\n";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -478,9 +502,14 @@ sub unique_email_list(@) {
|
||||||
my @emails;
|
my @emails;
|
||||||
|
|
||||||
foreach my $entry (@_) {
|
foreach my $entry (@_) {
|
||||||
my $clean = extract_valid_address($entry);
|
if (my $clean = extract_valid_address($entry)) {
|
||||||
next if $seen{$clean}++;
|
$seen{$clean} ||= 0;
|
||||||
push @emails, $entry;
|
next if $seen{$clean}++;
|
||||||
|
push @emails, $entry;
|
||||||
|
} else {
|
||||||
|
print STDERR "W: unable to extract a valid address",
|
||||||
|
" from: $entry\n";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return @emails;
|
return @emails;
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче