提交 4bc87a28 编写于 作者: E Eric Wong 提交者: Junio C Hamano

send-email: Change from Mail::Sendmail to Net::SMTP

Net::SMTP is in the base Perl distribution, so users are more
likely to have it.  Net::SMTP also allows reusing the SMTP
connection, so sending multiple emails is faster.

[jc: tweaked X-Mailer further while we are at it.]
Signed-off-by: NEric Wong <normalperson@yhbt.net>
Signed-off-by: NJunio C Hamano <junkio@cox.net>
上级 72095d5c
...@@ -19,11 +19,17 @@ ...@@ -19,11 +19,17 @@
use strict; use strict;
use warnings; use warnings;
use Term::ReadLine; use Term::ReadLine;
use Mail::Sendmail qw(sendmail %mailcfg);
use Getopt::Long; use Getopt::Long;
use Data::Dumper; use Data::Dumper;
use Net::SMTP;
use Email::Valid; use Email::Valid;
# most mail servers generate the Date: header, but not all...
$ENV{LC_ALL} = 'C';
use POSIX qw/strftime/;
my $smtp;
sub unique_email_list(@); sub unique_email_list(@);
sub cleanup_compose_files(); sub cleanup_compose_files();
...@@ -270,35 +276,45 @@ sub make_message_id ...@@ -270,35 +276,45 @@ sub make_message_id
sub send_message sub send_message
{ {
my $to = join (", ", unique_email_list(@to)); my @recipients = unique_email_list(@to);
my $to = join (",\n\t", @recipients);
%mail = ( To => $to, @recipients = unique_email_list(@recipients,@cc);
From => $from, my $date = strftime('%a, %d %b %Y %H:%M:%S %z', localtime(time));
CC => $cc,
Subject => $subject, my $header = "From: $from
Message => $message, To: $to
'Reply-to' => $from, Cc: $cc
'In-Reply-To' => $reply_to, Subject: $subject
'Message-ID' => $message_id, Reply-To: $from
'X-Mailer' => "git-send-email", Date: $date
); Message-Id: $message_id
X-Mailer: git-send-email @@GIT_VERSION@@
$mail{smtp} = $smtp_server; ";
$mailcfg{mime} = 0; $header .= "In-Reply-To: $reply_to\n" if $reply_to;
#print Data::Dumper->Dump([\%mail],[qw(*mail)]); $smtp ||= Net::SMTP->new( $smtp_server );
$smtp->mail( $from ) or die $smtp->message;
sendmail(%mail) or die $Mail::Sendmail::error; $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:\n", $Mail::Sendmail::log; print "OK. Log says:
print "\n\n" Date: $date
Server: $smtp_server Port: 25
From: $from
Subject: $subject
Cc: $cc
To: $to
Result: ", $smtp->code, ' ', ($smtp->message =~ /\n([^\n]+\n)$/s), "\n";
} }
} }
$reply_to = $initial_reply_to; $reply_to = $initial_reply_to;
make_message_id(); make_message_id();
$subject = $initial_subject; $subject = $initial_subject;
...@@ -389,7 +405,7 @@ () ...@@ -389,7 +405,7 @@ ()
} }
$smtp->quit if $smtp;
sub unique_email_list(@) { sub unique_email_list(@) {
my %seen; my %seen;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册