Hi, 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. This broke git send-email for me. The error message is Can't locate object method "starttls" via package "Net::SMTP" at /usr/lib/git-core/git-send-email line 1410. Is 1.28 the right minimum version? $ perl -e 'require Net::SMTP; print version->parse($Net::SMTP::VERSION); print "\n"' 2.31 $ grep VERSION /usr/share/perl/5.18.2/Net/SMTP.pm use vars qw($VERSION @ISA); $VERSION = "2.31"; $ grep starttls /usr/share/perl/5.18.2/Net/SMTP.pm $ dpkg-query -W perl perl 5.18.2-2ubuntu1.1 Patch left unsnipped for reference. Thanks, Jonathan > 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); > } > } > > -- > 2.12.0-488-gd3584ba >