Some MTAs reject or filter long header lines which can be generated if the cc list is only a few entries. Fold long header lines to 78 chars to be more rfc compliant. Signed-off-by: Joe Perches <joe@xxxxxxxxxxx> diff --git a/git-send-email.perl b/git-send-email.perl index dd821f7..cb8b48b 100755 --- a/git-send-email.perl +++ b/git-send-email.perl @@ -814,6 +814,41 @@ sub sanitize_address } +# Fold header lines to 78 chars if possible for better RFC 2822 compliance +# Does not terminate last line with newline +sub fold_header +{ + my ($folded_line, $separator, @entries) = @_; + my $folded_header = ""; + my $count = 0; + my $trim_sep = $separator; + + $trim_sep =~ s/\s+$//; + + foreach my $entry (@entries) { + if ($count == 0) { + $folded_line = "$folded_line$entry"; + } elsif ((length($folded_line) + length($entry)) > 78) { + if ($folded_header ne "") { + $folded_header = "$folded_header$trim_sep\n"; + } + $folded_header = "$folded_header$folded_line"; + $folded_line = " $entry"; + } else { + $folded_line = "$folded_line$separator$entry"; + } + $count++; + } + + if ($count == 0) { + $folded_header = "$folded_line"; + } else { + $folded_header = "$folded_header$trim_sep\n$folded_line"; + } + + return "$folded_header"; +} + # Returns 1 if the message was sent, and 0 otherwise. # In actuality, the whole program dies when there # is an error sending a message. @@ -835,10 +870,10 @@ sub send_message $gitversion = Git::version(); } - my $cc = join(", ", unique_email_list(@cc)); + @cc = unique_email_list(@cc); my $ccline = ""; - if ($cc ne '') { - $ccline = "\nCc: $cc"; + if (@cc gt 0) { + $ccline = fold_header("\nCc: ", ", ", @cc); } my $sanitized_sender = sanitize_address($sender); make_message_id() unless defined($message_id); @@ -976,7 +1011,7 @@ X-Mailer: git-send-email $gitversion if ($smtp_server !~ m#^/#) { print "Server: $smtp_server\n"; print "MAIL FROM:<$raw_from>\n"; - print "RCPT TO:".join(',',(map { "<$_>" } @recipients))."\n"; + print fold_header("RCPT TO:", ",", map { "<$_>" } @recipients)."\n"; } else { print "Sendmail: $smtp_server ".join(' ',@sendmail_parameters)."\n"; } -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html