send-email: add --[no-]outlook-id-fix option

Add an option to allow users to specifically enable or disable
retrieving the Message-ID from the Outlook SMTP server. This can be used
for other hosts mimicking the behaviour of Outlook, or for users who set
a custom domain to be a CNAME for the Outlook SMTP server.

While at it, lets also add missing * in description of --no-smtp-auth.

Helped-by: Junio C Hamano <gitster@pobox.com>
Signed-off-by: Aditya Garg <gargaditya08@live.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Aditya Garg
2025-04-29 16:37:09 +00:00
committed by Junio C Hamano
parent d235c468a5
commit daec3c08e3
2 changed files with 25 additions and 2 deletions

View File

@@ -115,6 +115,19 @@ illustration below where `[PATCH v2 0/3]` is in reply to `[PATCH 0/2]`:
Only necessary if --compose is also set. If --compose Only necessary if --compose is also set. If --compose
is not set, this will be prompted for. is not set, this will be prompted for.
--[no-]outlook-id-fix::
Microsoft Outlook SMTP servers discard the Message-ID sent via email and
assign a new random Message-ID, thus breaking threads.
+
With `--outlook-id-fix`, 'git send-email' uses a mechanism specific to
Outlook servers to learn the Message-ID the server assigned to fix the
threading. Use it only when you know that the server reports the
rewritten Message-ID the same way as Outlook servers do.
+
Without this option specified, the fix is done by default when talking
to 'smtp.office365.com' or 'smtp-mail.outlook.com'. Use
`--no-outlook-id-fix` to disable even when talking to these two servers.
--subject=<string>:: --subject=<string>::
Specify the initial subject of the email thread. Specify the initial subject of the email thread.
Only necessary if --compose is also set. If --compose Only necessary if --compose is also set. If --compose

View File

@@ -41,6 +41,8 @@ git send-email --translate-aliases
--subject <str> * Email "Subject:" --subject <str> * Email "Subject:"
--reply-to <str> * Email "Reply-To:" --reply-to <str> * Email "Reply-To:"
--in-reply-to <str> * Email "In-Reply-To:" --in-reply-to <str> * Email "In-Reply-To:"
--[no-]outlook-id-fix * The SMTP host is an Outlook server that munges the
Message-ID. Retrieve it from the server.
--[no-]xmailer * Add "X-Mailer:" header (default). --[no-]xmailer * Add "X-Mailer:" header (default).
--[no-]annotate * Review each patch that will be sent in an editor. --[no-]annotate * Review each patch that will be sent in an editor.
--compose * Open an editor for introduction. --compose * Open an editor for introduction.
@@ -68,7 +70,7 @@ git send-email --translate-aliases
--smtp-auth <str> * Space-separated list of allowed AUTH mechanisms, or --smtp-auth <str> * Space-separated list of allowed AUTH mechanisms, or
"none" to disable authentication. "none" to disable authentication.
This setting forces to use one of the listed mechanisms. This setting forces to use one of the listed mechanisms.
--no-smtp-auth Disable SMTP authentication. Shorthand for --no-smtp-auth * Disable SMTP authentication. Shorthand for
`--smtp-auth=none` `--smtp-auth=none`
--smtp-debug <0|1> * Disable, enable Net::SMTP debug. --smtp-debug <0|1> * Disable, enable Net::SMTP debug.
@@ -290,6 +292,7 @@ my $validate = 1;
my $mailmap = 0; my $mailmap = 0;
my $target_xfer_encoding = 'auto'; my $target_xfer_encoding = 'auto';
my $forbid_sendmail_variables = 1; my $forbid_sendmail_variables = 1;
my $outlook_id_fix = 'auto';
my %config_bool_settings = ( my %config_bool_settings = (
"thread" => \$thread, "thread" => \$thread,
@@ -305,6 +308,7 @@ my %config_bool_settings = (
"xmailer" => \$use_xmailer, "xmailer" => \$use_xmailer,
"forbidsendmailvariables" => \$forbid_sendmail_variables, "forbidsendmailvariables" => \$forbid_sendmail_variables,
"mailmap" => \$mailmap, "mailmap" => \$mailmap,
"outlookidfix" => \$outlook_id_fix,
); );
my %config_settings = ( my %config_settings = (
@@ -551,6 +555,7 @@ my %options = (
"relogin-delay=i" => \$relogin_delay, "relogin-delay=i" => \$relogin_delay,
"git-completion-helper" => \$git_completion_helper, "git-completion-helper" => \$git_completion_helper,
"v=s" => \$reroll_count, "v=s" => \$reroll_count,
"outlook-id-fix!" => \$outlook_id_fix,
); );
$rc = GetOptions(%options); $rc = GetOptions(%options);
@@ -1576,7 +1581,12 @@ Message-ID: $message_id
sub is_outlook { sub is_outlook {
my ($host) = @_; my ($host) = @_;
return ($host eq 'smtp.office365.com' || $host eq 'smtp-mail.outlook.com'); if ($outlook_id_fix eq 'auto') {
$outlook_id_fix =
($host eq 'smtp.office365.com' ||
$host eq 'smtp-mail.outlook.com') ? 1 : 0;
}
return $outlook_id_fix;
} }
# Prepares the email, then asks the user what to do. # Prepares the email, then asks the user what to do.