On Fri, May 19, 2017 at 10:54 PM, Dennis Kaarsemaker <dennis@xxxxxxxxxxxxxxx> wrote: > Second ping. This problem is not going away, so if this solution is not > acceptable, I'd like to know what needs to be improved. FWIW: Reviewed-by: Ævar Arnfjörð Bjarmason <avarab@xxxxxxxxx> > On Thu, 2017-05-04 at 09:01 +0200, Dennis Kaarsemaker wrote: >> Ping. It's a little over a month since I sent this, but I haven't seen >> any comments. Is this commit good to go? >> >> On Fri, 2017-03-24 at 22:37 +0100, Dennis Kaarsemaker wrote: >> > Net::SMTP itself can do the necessary SSL and STARTTLS bits just fine >> > since version 1.28, and Net::SMTP::SSL is now deprecated. Since 1.28 >> > isn't that old yet, keep the old code in place and use it when >> > necessary. >> > >> > While we're in the area, mark some messages for translation that were >> > not yet marked as such. >> > >> > Signed-off-by: Dennis Kaarsemaker <dennis@xxxxxxxxxxxxxxx> >> > --- >> > git-send-email.perl | 54 ++++++++++++++++++++++++++++++++++------------------- >> > 1 file changed, 35 insertions(+), 19 deletions(-) >> > >> > diff --git a/git-send-email.perl b/git-send-email.perl >> > index eea0a517f7..0d90439d9a 100755 >> > --- a/git-send-email.perl >> > +++ b/git-send-email.perl >> > @@ -1353,10 +1353,12 @@ EOF >> > die __("The required SMTP server is not properly defined.") >> > } >> > >> > + require Net::SMTP; >> > + my $use_net_smtp_ssl = version->parse($Net::SMTP::VERSION) < version->parse("1.28"); >> > + $smtp_domain ||= maildomain(); >> > + >> > if ($smtp_encryption eq 'ssl') { >> > $smtp_server_port ||= 465; # ssmtp >> > - require Net::SMTP::SSL; >> > - $smtp_domain ||= maildomain(); >> > require IO::Socket::SSL; >> > >> > # Suppress "variable accessed once" warning. >> > @@ -1368,34 +1370,48 @@ EOF >> > # Net::SMTP::SSL->new() does not forward any SSL options >> > IO::Socket::SSL::set_client_defaults( >> > ssl_verify_params()); >> > - $smtp ||= Net::SMTP::SSL->new($smtp_server, >> > - Hello => $smtp_domain, >> > - Port => $smtp_server_port, >> > - Debug => $debug_net_smtp); >> > + >> > + if ($use_net_smtp_ssl) { >> > + require Net::SMTP::SSL; >> > + $smtp ||= Net::SMTP::SSL->new($smtp_server, >> > + Hello => $smtp_domain, >> > + Port => $smtp_server_port, >> > + Debug => $debug_net_smtp); >> > + } >> > + else { >> > + $smtp ||= Net::SMTP->new($smtp_server, >> > + Hello => $smtp_domain, >> > + Port => $smtp_server_port, >> > + Debug => $debug_net_smtp, >> > + SSL => 1); >> > + } >> > } >> > else { >> > - require Net::SMTP; >> > - $smtp_domain ||= maildomain(); >> > $smtp_server_port ||= 25; >> > $smtp ||= Net::SMTP->new($smtp_server, >> > Hello => $smtp_domain, >> > Debug => $debug_net_smtp, >> > Port => $smtp_server_port); >> > if ($smtp_encryption eq 'tls' && $smtp) { >> > - require Net::SMTP::SSL; >> > - $smtp->command('STARTTLS'); >> > - $smtp->response(); >> > - if ($smtp->code == 220) { >> > + if ($use_net_smtp_ssl) { >> > + $smtp->command('STARTTLS'); >> > + $smtp->response(); >> > + if ($smtp->code != 220) { >> > + die sprintf(__("Server does not support STARTTLS! %s"), $smtp->message); >> > + } >> > + require Net::SMTP::SSL; >> > $smtp = Net::SMTP::SSL->start_SSL($smtp, >> > ssl_verify_params()) >> > - or die "STARTTLS failed! ".IO::Socket::SSL::errstr(); >> > - $smtp_encryption = ''; >> > - # Send EHLO again to receive fresh >> > - # supported commands >> > - $smtp->hello($smtp_domain); >> > - } else { >> > - die sprintf(__("Server does not support STARTTLS! %s"), $smtp->message); >> > + or die sprintf(__("STARTTLS failed! %s"), IO::Socket::SSL::errstr()); >> > + } >> > + else { >> > + $smtp->starttls(ssl_verify_params()) >> > + or die sprintf(__("STARTTLS failed! %s"), IO::Socket::SSL::errstr()); >> > } >> > + $smtp_encryption = ''; >> > + # Send EHLO again to receive fresh >> > + # supported commands >> > + $smtp->hello($smtp_domain); >> > } >> > } >> >