Skip to content

Commit 663bf04

Browse files
committed
Merge branch 'dk/send-email-avoid-net-smtp-ssl-when-able'
"git send-email" now uses Net::SMTP::SSL, which is obsolete, only when needed. Recent versions of Net::SMTP can do TLS natively. * dk/send-email-avoid-net-smtp-ssl-when-able: send-email: Net::SMTP::SSL is obsolete, use only when necessary
2 parents 9aa5559 + 0ead000 commit 663bf04

1 file changed

Lines changed: 35 additions & 19 deletions

File tree

git-send-email.perl

Lines changed: 35 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1354,10 +1354,12 @@ sub send_message {
13541354
die __("The required SMTP server is not properly defined.")
13551355
}
13561356

1357+
require Net::SMTP;
1358+
my $use_net_smtp_ssl = version->parse($Net::SMTP::VERSION) < version->parse("1.28");
1359+
$smtp_domain ||= maildomain();
1360+
13571361
if ($smtp_encryption eq 'ssl') {
13581362
$smtp_server_port ||= 465; # ssmtp
1359-
require Net::SMTP::SSL;
1360-
$smtp_domain ||= maildomain();
13611363
require IO::Socket::SSL;
13621364

13631365
# Suppress "variable accessed once" warning.
@@ -1369,34 +1371,48 @@ sub send_message {
13691371
# Net::SMTP::SSL->new() does not forward any SSL options
13701372
IO::Socket::SSL::set_client_defaults(
13711373
ssl_verify_params());
1372-
$smtp ||= Net::SMTP::SSL->new($smtp_server,
1373-
Hello => $smtp_domain,
1374-
Port => $smtp_server_port,
1375-
Debug => $debug_net_smtp);
1374+
1375+
if ($use_net_smtp_ssl) {
1376+
require Net::SMTP::SSL;
1377+
$smtp ||= Net::SMTP::SSL->new($smtp_server,
1378+
Hello => $smtp_domain,
1379+
Port => $smtp_server_port,
1380+
Debug => $debug_net_smtp);
1381+
}
1382+
else {
1383+
$smtp ||= Net::SMTP->new($smtp_server,
1384+
Hello => $smtp_domain,
1385+
Port => $smtp_server_port,
1386+
Debug => $debug_net_smtp,
1387+
SSL => 1);
1388+
}
13761389
}
13771390
else {
1378-
require Net::SMTP;
1379-
$smtp_domain ||= maildomain();
13801391
$smtp_server_port ||= 25;
13811392
$smtp ||= Net::SMTP->new($smtp_server,
13821393
Hello => $smtp_domain,
13831394
Debug => $debug_net_smtp,
13841395
Port => $smtp_server_port);
13851396
if ($smtp_encryption eq 'tls' && $smtp) {
1386-
require Net::SMTP::SSL;
1387-
$smtp->command('STARTTLS');
1388-
$smtp->response();
1389-
if ($smtp->code == 220) {
1397+
if ($use_net_smtp_ssl) {
1398+
$smtp->command('STARTTLS');
1399+
$smtp->response();
1400+
if ($smtp->code != 220) {
1401+
die sprintf(__("Server does not support STARTTLS! %s"), $smtp->message);
1402+
}
1403+
require Net::SMTP::SSL;
13901404
$smtp = Net::SMTP::SSL->start_SSL($smtp,
13911405
ssl_verify_params())
1392-
or die "STARTTLS failed! ".IO::Socket::SSL::errstr();
1393-
$smtp_encryption = '';
1394-
# Send EHLO again to receive fresh
1395-
# supported commands
1396-
$smtp->hello($smtp_domain);
1397-
} else {
1398-
die sprintf(__("Server does not support STARTTLS! %s"), $smtp->message);
1406+
or die sprintf(__("STARTTLS failed! %s"), IO::Socket::SSL::errstr());
1407+
}
1408+
else {
1409+
$smtp->starttls(ssl_verify_params())
1410+
or die sprintf(__("STARTTLS failed! %s"), IO::Socket::SSL::errstr());
13991411
}
1412+
$smtp_encryption = '';
1413+
# Send EHLO again to receive fresh
1414+
# supported commands
1415+
$smtp->hello($smtp_domain);
14001416
}
14011417
}
14021418

0 commit comments

Comments
 (0)