send-email: support separate Reply-To address
In some projects contributions from groups are only accepted from a common group email address. But every individual may want to receive replies to her own personal address. That's what we have 'Reply-To' headers for in SMTP. So introduce an optional '--reply-to' command line option. This patch re-uses the $reply_to variable. This could break out-of-tree patches! Signed-off-by: Christian Ludwig <chrissicool@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
							parent
							
								
									15dc3b9161
								
							
						
					
					
						commit
						d11c943c78
					
				|  | @ -84,6 +84,11 @@ See the CONFIGURATION section for `sendemail.multiEdit`. | |||
| 	the value of GIT_AUTHOR_IDENT, or GIT_COMMITTER_IDENT if that is not | ||||
| 	set, as returned by "git var -l". | ||||
|  | ||||
| --reply-to=<address>:: | ||||
| 	Specify the address where replies from recipients should go to. | ||||
| 	Use this if replies to messages should go to another address than what | ||||
| 	is specified with the --from parameter. | ||||
|  | ||||
| --in-reply-to=<identifier>:: | ||||
| 	Make the first mail (or all the mails with `--no-thread`) appear as a | ||||
| 	reply to the given Message-Id, which avoids breaking threads to | ||||
|  |  | |||
|  | @ -2081,7 +2081,7 @@ _git_send_email () | |||
| 			--compose --confirm= --dry-run --envelope-sender | ||||
| 			--from --identity | ||||
| 			--in-reply-to --no-chain-reply-to --no-signed-off-by-cc | ||||
| 			--no-suppress-from --no-thread --quiet | ||||
| 			--no-suppress-from --no-thread --quiet --reply-to | ||||
| 			--signed-off-by-cc --smtp-pass --smtp-server | ||||
| 			--smtp-server-port --smtp-encryption= --smtp-user | ||||
| 			--subject --suppress-cc= --suppress-from --thread --to | ||||
|  |  | |||
|  | @ -56,6 +56,7 @@ git send-email --dump-aliases | |||
|     --[no-]cc               <str>  * Email Cc: | ||||
|     --[no-]bcc              <str>  * Email Bcc: | ||||
|     --subject               <str>  * Email "Subject:" | ||||
|     --reply-to              <str>  * Email "Reply-To:" | ||||
|     --in-reply-to           <str>  * Email "In-Reply-To:" | ||||
|     --[no-]xmailer                 * Add "X-Mailer:" header (default). | ||||
|     --[no-]annotate                * Review each patch that will be sent in an editor. | ||||
|  | @ -166,7 +167,7 @@ my $re_encoded_word = qr/=\?($re_token)\?($re_token)\?($re_encoded_text)\?=/; | |||
|  | ||||
| # Variables we fill in automatically, or via prompting: | ||||
| my (@to,$no_to,@initial_to,@cc,$no_cc,@initial_cc,@bcclist,$no_bcc,@xh, | ||||
| 	$initial_in_reply_to,$initial_subject,@files, | ||||
| 	$initial_in_reply_to,$reply_to,$initial_subject,@files, | ||||
| 	$author,$sender,$smtp_authpass,$annotate,$use_xmailer,$compose,$time); | ||||
|  | ||||
| my $envelope_sender; | ||||
|  | @ -315,6 +316,7 @@ die __("--dump-aliases incompatible with other options\n") | |||
| $rc = GetOptions( | ||||
| 		    "sender|from=s" => \$sender, | ||||
|                     "in-reply-to=s" => \$initial_in_reply_to, | ||||
| 		    "reply-to=s" => \$reply_to, | ||||
| 		    "subject=s" => \$initial_subject, | ||||
| 		    "to=s" => \@initial_to, | ||||
| 		    "to-cmd=s" => \$to_cmd, | ||||
|  | @ -677,6 +679,7 @@ if ($compose) { | |||
| 	my $tpl_sender = $sender || $repoauthor || $repocommitter || ''; | ||||
| 	my $tpl_subject = $initial_subject || ''; | ||||
| 	my $tpl_in_reply_to = $initial_in_reply_to || ''; | ||||
| 	my $tpl_reply_to = $reply_to || ''; | ||||
|  | ||||
| 	print $c <<EOT1, Git::prefix_lines("GIT: ", __ <<EOT2), <<EOT3; | ||||
| From $tpl_sender # This line is ignored. | ||||
|  | @ -688,6 +691,7 @@ for the patch you are writing. | |||
| Clear the body content if you don't wish to send a summary. | ||||
| EOT2 | ||||
| From: $tpl_sender | ||||
| Reply-To: $tpl_reply_to | ||||
| Subject: $tpl_subject | ||||
| In-Reply-To: $tpl_in_reply_to | ||||
|  | ||||
|  | @ -730,6 +734,9 @@ EOT3 | |||
| 	if ($parsed_email{'In-Reply-To'}) { | ||||
| 		$initial_in_reply_to = delete($parsed_email{'In-Reply-To'}); | ||||
| 	} | ||||
| 	if ($parsed_email{'Reply-To'}) { | ||||
| 		$reply_to = delete($parsed_email{'Reply-To'}); | ||||
| 	} | ||||
| 	if ($parsed_email{'Subject'}) { | ||||
| 		$initial_subject = delete($parsed_email{'Subject'}); | ||||
| 		print $c2 "Subject: " . | ||||
|  | @ -923,6 +930,12 @@ if (defined $initial_in_reply_to) { | |||
| 	$initial_in_reply_to = "<$initial_in_reply_to>" if $initial_in_reply_to ne ''; | ||||
| } | ||||
|  | ||||
| if (defined $reply_to) { | ||||
| 	$reply_to =~ s/^\s+|\s+$//g; | ||||
| 	($reply_to) = expand_aliases($reply_to); | ||||
| 	$reply_to = sanitize_address($reply_to); | ||||
| } | ||||
|  | ||||
| if (!defined $smtp_server) { | ||||
| 	my @sendmail_paths = qw( /usr/sbin/sendmail /usr/lib/sendmail ); | ||||
| 	push @sendmail_paths, map {"$_/sendmail"} split /:/, $ENV{PATH}; | ||||
|  | @ -1354,6 +1367,9 @@ Message-Id: $message_id | |||
| 		$header .= "In-Reply-To: $in_reply_to\n"; | ||||
| 		$header .= "References: $references\n"; | ||||
| 	} | ||||
| 	if ($reply_to) { | ||||
| 		$header .= "Reply-To: $reply_to\n"; | ||||
| 	} | ||||
| 	if (@xh) { | ||||
| 		$header .= join("\n", @xh) . "\n"; | ||||
| 	} | ||||
|  |  | |||
|  | @ -199,6 +199,7 @@ Message-Id: MESSAGE-ID-STRING | |||
| X-Mailer: X-MAILER-STRING | ||||
| In-Reply-To: <unique-message-id@example.com> | ||||
| References: <unique-message-id@example.com> | ||||
| Reply-To: Reply <reply@example.com> | ||||
|  | ||||
| Result: OK | ||||
| EOF | ||||
|  | @ -291,6 +292,7 @@ test_expect_success $PREREQ 'Show all headers' ' | |||
| 		--dry-run \ | ||||
| 		--suppress-cc=sob \ | ||||
| 		--from="Example <from@example.com>" \ | ||||
| 		--reply-to="Reply <reply@example.com>" \ | ||||
| 		--to=to@example.com \ | ||||
| 		--cc=cc@example.com \ | ||||
| 		--bcc=bcc@example.com \ | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Christian Ludwig
						Christian Ludwig