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. Helped-by: Junio C Hamano <gitster@xxxxxxxxx> Signed-off-by: Aditya Garg <gargaditya08@xxxxxxxx> --- v2: Replace tab with spaces in "outlookidtweak" => \$outlook_id_tweak, Documentation/git-send-email.adoc | 14 ++++++++++++++ git-send-email.perl | 14 +++++++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/Documentation/git-send-email.adoc b/Documentation/git-send-email.adoc index 7f223db42d..20f804e4c7 100644 --- a/Documentation/git-send-email.adoc +++ b/Documentation/git-send-email.adoc @@ -153,6 +153,20 @@ Note that no attempts whatsoever are made to validate the encoding. Default is the value of the `sendemail.transferEncoding` configuration value; if that is unspecified, default to `auto`. +--smtp-outlook-id-tweak=(always|never|auto):: + Outlook servers discard the Message-ID sent via email and assign a + new random Message-ID, thus breaking threads. ++ +-- +- 'auto' will attempt to retrieve the ID from the server only if the SMTP + server is 'smtp.office365.com' or 'smtp-mail.outlook.com'. +- 'always' will attempt to retrieve the ID from the server irrespective of + the SMTP server being used. Use only if Microsoft is your email provider. +- 'never' will disable this tweak irrespective of theSMTP server being used. +-- ++ +If not specified, the default behaviour will be that of 'auto'. + --xmailer:: --no-xmailer:: Add (or prevent adding) the "X-Mailer:" header. By default, diff --git a/git-send-email.perl b/git-send-email.perl index 618474916e..20cc460ed6 100755 --- a/git-send-email.perl +++ b/git-send-email.perl @@ -60,6 +60,8 @@ sub usage { --smtp-user <str> * Username for SMTP-AUTH. --smtp-pass <str> * Password for SMTP-AUTH; not necessary. --smtp-encryption <str> * tls or ssl; anything else disables. + --smtp-outlook-id-tweak <str> * This server munges Message-ID. Retrieve it from + the server. --smtp-ssl * Deprecated. Use '--smtp-encryption ssl'. --smtp-ssl-cert-path <str> * Path to ca-certificates (either directory or file). Pass an empty string to disable certificate @@ -290,6 +292,7 @@ sub do_edit { my $mailmap = 0; my $target_xfer_encoding = 'auto'; my $forbid_sendmail_variables = 1; +my $outlook_id_tweak = 'auto'; my %config_bool_settings = ( "thread" => \$thread, @@ -333,6 +336,7 @@ sub do_edit { "composeencoding" => \$compose_encoding, "transferencoding" => \$target_xfer_encoding, "sendmailcmd" => \$sendmail_cmd, + "outlookidtweak" => \$outlook_id_tweak, ); my %config_path_settings = ( @@ -518,6 +522,7 @@ sub config_regexp { "smtp-pass:s" => \$smtp_authpass, "smtp-ssl" => sub { $smtp_encryption = 'ssl' }, "smtp-encryption=s" => \$smtp_encryption, + "smtp-outlook-id-tweak=s" => \$outlook_id_tweak, "smtp-ssl-cert-path=s" => \$smtp_ssl_cert_path, "smtp-debug:i" => \$debug_net_smtp, "smtp-domain:s" => \$smtp_domain, @@ -1576,7 +1581,14 @@ sub gen_header { sub is_outlook { my ($host) = @_; - return ($host eq 'smtp.office365.com' || $host eq 'smtp-mail.outlook.com'); + if ($outlook_id_tweak eq 'always') { + return 1; + } elsif ($outlook_id_tweak eq 'never') { + return 0; + } else { + return ($host eq 'smtp.office365.com' || + $host eq 'smtp-mail.outlook.com'); + } } # Prepares the email, then asks the user what to do. -- 2.49.0