On 29/04/2017 14:26, xiaoqiang zhao wrote: > 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> I think you should also add a matching configuration option, or you are going to forget it on the command line sooner or later! Paolo > --- > 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; > } > >