Some email server(e.g. smtp.163.com) limits a fixed number emails to be send per session(connection) and this will lead to a send faliure. With --split <num> option, a auto reconnection will occur when number of sended email reaches <num> and the problem is solved. Signed-off-by: xiaoqiang zhao <zxq_yx_007@xxxxxxx> --- git-send-email.perl | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/git-send-email.perl b/git-send-email.perl index eea0a517f..0de9b7058 100755 --- a/git-send-email.perl +++ b/git-send-email.perl @@ -81,6 +81,8 @@ git send-email --dump-aliases This setting forces to use one of the listed mechanisms. --smtp-debug <0|1> * Disable, enable Net::SMTP debug. + --split <int> * send \$num message per connection. + Automating: --identity <str> * Use the sendemail.<id> options. --to-cmd <str> * Email To: via `<str> \$patch_path` @@ -153,6 +155,7 @@ my $have_email_valid = eval { require Email::Valid; 1 }; my $have_mail_address = eval { require Mail::Address; 1 }; my $smtp; my $auth; +my $send_count = 0; # Regexes for RFC 2047 productions. my $re_token = qr/[^][()<>@,;:\\"\/?.= \000-\037\177-\377]+/; @@ -186,6 +189,7 @@ my $format_patch; my $compose_filename; my $force = 0; my $dump_aliases = 0; +my $split = 0; # Handle interactive edition of files. my $multiedit; @@ -358,6 +362,7 @@ $rc = GetOptions( "force" => \$force, "xmailer!" => \$use_xmailer, "no-xmailer" => sub {$use_xmailer = 0}, + "split=i" => \$split, ); usage() if $help; @@ -1158,10 +1163,15 @@ sub smtp_host_string { # (smtp_user was not specified), and 0 otherwise. sub smtp_auth_maybe { - if (!defined $smtp_authuser || $auth) { + if (!defined $smtp_authuser || $send_count != 0) { return 1; } + if ($auth && $send_count == 0) { + print "Auth use saved password. \n"; + return !!$smtp->auth($smtp_authuser, $smtp_authpass); + } + # Workaround AUTH PLAIN/LOGIN interaction defect # with Authen::SASL::Cyrus eval { @@ -1187,6 +1197,7 @@ sub smtp_auth_maybe { 'password' => $smtp_authpass }, sub { my $cred = shift; + $smtp_authpass = $cred->{'password'}; if ($smtp_auth) { my $sasl = Authen::SASL->new( @@ -1442,6 +1453,15 @@ EOF } } + $send_count++; + if ($send_count == $split) { + $smtp->quit; + $smtp = undef; + $send_count = 0; + print "Reconnect SMTP server required. \n"; + + } + return 1; } -- 2.11.0