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 <[email protected]>
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;
> }
>
>