]> git.ipfire.org Git - thirdparty/git.git/commitdiff
send-email: add --[no-]outlook-id-fix option
authorAditya Garg <gargaditya08@live.com>
Tue, 29 Apr 2025 16:37:09 +0000 (16:37 +0000)
committerJunio C Hamano <gitster@pobox.com>
Tue, 29 Apr 2025 17:06:52 +0000 (10:06 -0700)
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>
Documentation/git-send-email.adoc
git-send-email.perl

index 7f223db42dd313f114d86dc58cbf1ed44f6e89d1..92389036fa368cb61e334292210bcf71bea59283 100644 (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
 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>::
        Specify the initial subject of the email thread.
        Only necessary if --compose is also set.  If --compose
index 618474916e8c3eb3c5509dbdfccd526d5197d951..4215f8f7e951e325aa06953bc20b0c9d2e181199 100755 (executable)
@@ -41,6 +41,8 @@ git send-email --translate-aliases
     --subject               <str>  * Email "Subject:"
     --reply-to              <str>  * Email "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-]annotate                * Review each patch that will be sent in an editor.
     --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
                                      "none" to disable authentication.
                                      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-debug            <0|1>  * Disable, enable Net::SMTP debug.
 
@@ -290,6 +292,7 @@ my $validate = 1;
 my $mailmap = 0;
 my $target_xfer_encoding = 'auto';
 my $forbid_sendmail_variables = 1;
+my $outlook_id_fix = 'auto';
 
 my %config_bool_settings = (
     "thread" => \$thread,
@@ -305,6 +308,7 @@ my %config_bool_settings = (
     "xmailer" => \$use_xmailer,
     "forbidsendmailvariables" => \$forbid_sendmail_variables,
     "mailmap" => \$mailmap,
+    "outlookidfix" => \$outlook_id_fix,
 );
 
 my %config_settings = (
@@ -551,6 +555,7 @@ my %options = (
                    "relogin-delay=i" => \$relogin_delay,
                    "git-completion-helper" => \$git_completion_helper,
                    "v=s" => \$reroll_count,
+                   "outlook-id-fix!" => \$outlook_id_fix,
 );
 $rc = GetOptions(%options);
 
@@ -1576,7 +1581,12 @@ Message-ID: $message_id
 
 sub is_outlook {
        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.