summaryrefslogtreecommitdiff
path: root/git-send-email.perl
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2017-07-07 01:14:46 (GMT)
committerJunio C Hamano <gitster@pobox.com>2017-07-07 01:14:46 (GMT)
commiteb37527ab0b6e9ff1cbd01aa20a4dd6aa4150a96 (patch)
treea5bd1509681216a52c9d8f856e727d7f339ebce2 /git-send-email.perl
parentccce1e51e8cbc39e944302c2e34f15ef5cb39fce (diff)
parent5453b83bdf92efbfe9e9aaa54d4c62ce48ced2f5 (diff)
downloadgit-eb37527ab0b6e9ff1cbd01aa20a4dd6aa4150a96.zip
git-eb37527ab0b6e9ff1cbd01aa20a4dd6aa4150a96.tar.gz
git-eb37527ab0b6e9ff1cbd01aa20a4dd6aa4150a96.tar.bz2
Merge branch 'xz/send-email-batch-size'
"git send-email" learned to overcome some SMTP server limitation that does not allow many pieces of e-mails to be sent over a single session. * xz/send-email-batch-size: send-email: --batch-size to work around some SMTP server limit
Diffstat (limited to 'git-send-email.perl')
-rwxr-xr-xgit-send-email.perl18
1 files changed, 18 insertions, 0 deletions
diff --git a/git-send-email.perl b/git-send-email.perl
index 7fd5874..fa65269 100755
--- a/git-send-email.perl
+++ b/git-send-email.perl
@@ -82,6 +82,10 @@ git send-email --dump-aliases
This setting forces to use one of the listed mechanisms.
--smtp-debug <0|1> * Disable, enable Net::SMTP debug.
+ --batch-size <int> * send max <int> message per connection.
+ --relogin-delay <int> * delay <int> seconds between two successive login.
+ This option can only be used with --batch-size
+
Automating:
--identity <str> * Use the sendemail.<id> options.
--to-cmd <str> * Email To: via `<str> \$patch_path`
@@ -154,6 +158,7 @@ my $have_email_valid = eval { require Email::Valid; 1 };
my $have_mail_address = eval { require Mail::Address; 1 };
my $smtp;
my $auth;
+my $num_sent = 0;
# Regexes for RFC 2047 productions.
my $re_token = qr/[^][()<>@,;:\\"\/?.= \000-\037\177-\377]+/;
@@ -217,6 +222,7 @@ my ($cover_cc, $cover_to);
my ($to_cmd, $cc_cmd);
my ($smtp_server, $smtp_server_port, @smtp_server_options);
my ($smtp_authuser, $smtp_encryption, $smtp_ssl_cert_path);
+my ($batch_size, $relogin_delay);
my ($identity, $aliasfiletype, @alias_files, $smtp_domain, $smtp_auth);
my ($validate, $confirm);
my (@suppress_cc);
@@ -248,6 +254,8 @@ my %config_settings = (
"smtppass" => \$smtp_authpass,
"smtpdomain" => \$smtp_domain,
"smtpauth" => \$smtp_auth,
+ "smtpbatchsize" => \$batch_size,
+ "smtprelogindelay" => \$relogin_delay,
"to" => \@initial_to,
"tocmd" => \$to_cmd,
"cc" => \@initial_cc,
@@ -359,6 +367,8 @@ $rc = GetOptions(
"force" => \$force,
"xmailer!" => \$use_xmailer,
"no-xmailer" => sub {$use_xmailer = 0},
+ "batch-size=i" => \$batch_size,
+ "relogin-delay=i" => \$relogin_delay,
);
usage() if $help;
@@ -1681,6 +1691,14 @@ foreach my $t (@files) {
}
}
$message_id = undef;
+ $num_sent++;
+ if (defined $batch_size && $num_sent == $batch_size) {
+ $num_sent = 0;
+ $smtp->quit if defined $smtp;
+ undef $smtp;
+ undef $auth;
+ sleep($relogin_delay) if defined $relogin_delay;
+ }
}
# Execute a command (e.g. $to_cmd) to get a list of email addresses