From: Junio C Hamano <gitster@pobox.com>
To: Aditya Garg <gargaditya08@live.com>
Cc: Julian Swagemakers <julian@swagemakers.org>,
git@vger.kernel.org, M Hickford <mirth.hickford@gmail.com>,
sandals@crustytoothpaste.net, Shengyu Qu <wiagn233@outlook.com>
Subject: Re: [PATCH v4 2/3] send-email: retrieve Message-ID from outlook SMTP server
Date: Wed, 23 Apr 2025 11:54:33 -0700 [thread overview]
Message-ID: <xmqq5xiuzp1y.fsf@gitster.g> (raw)
In-Reply-To: <PN3PR01MB9597EFFF817F0FD3D8B3772DB8BA2@PN3PR01MB9597.INDPRD01.PROD.OUTLOOK.COM> (Aditya Garg's message of "Wed, 23 Apr 2025 12:19:46 +0000")
Aditya Garg <gargaditya08@live.com> writes:
> The script generates a Message-ID alongwith the other headers when
> gen_header is called, and is sent alongwith the email. For most email
> providers, including gmail, the Message-ID goes unchanged to the
> recipient.
>
> But, this does not seem to be a case with Outlook. In Outlook, when we
> send our own Message-ID as a part of the headers, it discards it. Rather
> it generates a new random Message-ID and that is was the recipient gets.
"Rather" -> "Then".
"that is was the" -> "that is what the".
probably.
> The Message-ID we specified get stored as a part of Outlook's
> proprietary X-Microsoft-Original-Message-ID header.
For our purpose, X-MS-Original stuff is an extra noise that can be
omitted, as there is no way we or recipients can make good use of
the value on that field.
> This is a problem because the Message-ID is crucial when we are sending
> multiple emails in a thread. The current implementation for threads in
> the script replies to the Message-ID it generated, but due to Outlook's
> behavior, it is not the same as the one that the recipient got, thus
> breaking threads. So a need arises to retrieve the Message-ID from the
> server response and set it in the In-Reply-To and References email
> headers instead of using the self generated one for the purpose of
> replies.
>
> The $smtp->message variable in this script for outlook is something like
> this:
>
> 2.0.0 OK <Message-ID> [Hostname=Some-hostname]
>
> The Message-ID here is the one the receipient gets, rather than the one
> the script generated.
>
> This patch uses the fact above and retrieves the Message-ID from the
> server response. It then changes the value of the $message_id variable
> to the one received from the server. This value will be used when next
> and subsequent messages are sent as replies to the message, thus
> preserving the threading of the messages.
>
> Signed-off-by: Aditya Garg <gargaditya08@live.com>
> ---
Thanks for a thorough description. It reads very well.
> git-send-email.perl | 20 ++++++++++++++++++++
> 1 file changed, 20 insertions(+)
>
> diff --git a/git-send-email.perl b/git-send-email.perl
> index a6cafda29c..a18e978e22 100755
> --- a/git-send-email.perl
> +++ b/git-send-email.perl
> @@ -1636,6 +1636,11 @@ sub gen_header {
> return ($recipients_ref, $to, $date, $gitversion, $cc, $ccline, $header);
> }
>
> +sub is_outlook {
> + my ($host) = @_;
> + return ($host eq 'smtp.office365.com' || $host eq 'smtp-mail.outlook.com');
> +}
> +
> # Prepares the email, then asks the user what to do.
> #
> # If the user chooses to send the email, it's sent and 1 is returned.
> @@ -1799,6 +1804,21 @@ sub send_message {
> $smtp->datasend("$line") or die $smtp->message;
> }
> $smtp->dataend() or die $smtp->message;
> +
> + # Outlook discards the Message-ID header we set while sending the email.
> + # It instead saves it in its proprietary X-Microsoft-Original-Message-ID
> + # header and assigns a new random Message-ID to the email. So in order to
Again, "It instead ... header and" is probably better left unsaid.
> + # avoid breaking threads, we simply retrieve the Message-ID from the server
> + # response and assign it to $message_id.
Perhaps add ", which will then be assigned to $in_reply_to by the
caller when the next message is sent as a response to this message"
at the end?
Other than that, looks superb. Thanks.
> + if (is_outlook($smtp_server)) {
> + if ($smtp->message =~ /<([^>]+)>/) {
> + $message_id = "<$1>";
> + printf __("Outlook reassigned Message-ID to: %s\n"), $message_id;
> + } else {
> + warn __("Warning: Could not retrieve Message-ID from server response.\n");
> + }
> + }
> +
> $smtp->code =~ /250|200/ or die sprintf(__("Failed to send %s\n"), $subject).$smtp->message;
> }
> if ($quiet) {
next prev parent reply other threads:[~2025-04-23 18:54 UTC|newest]
Thread overview: 63+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-23 12:19 [PATCH v4 0/3] send-email: add oauth2 support and fix outlook breaking threads Aditya Garg
2025-04-23 12:19 ` [PATCH v4 1/3] send-email: implement SMTP bearer authentication Aditya Garg
2025-04-23 18:04 ` Junio C Hamano
2025-04-23 18:33 ` Aditya Garg
2025-04-24 6:36 ` Greg Kroah-Hartman
2025-04-24 8:23 ` Aditya Garg
2025-04-23 12:19 ` [PATCH v4 2/3] send-email: retrieve Message-ID from outlook SMTP server Aditya Garg
2025-04-23 18:54 ` Junio C Hamano [this message]
2025-04-23 22:52 ` brian m. carlson
2025-04-24 3:42 ` Aditya Garg
2025-04-23 12:19 ` [PATCH v4 3/3] send-email: add option to generate passswords like OAuth2 tokens Aditya Garg
2025-04-23 19:03 ` Junio C Hamano
2025-04-24 3:29 ` Aditya Garg
2025-04-24 12:43 ` Junio C Hamano
2025-04-23 20:50 ` [PATCH v4 0/3] send-email: add oauth2 support and fix outlook breaking threads M Hickford
2025-04-24 3:44 ` Aditya Garg
2025-04-24 7:53 ` [PATCH v5 " Aditya Garg
2025-04-24 7:53 ` [PATCH v5 1/3] send-email: implement SMTP bearer authentication Aditya Garg
2025-04-24 12:12 ` Julian Swagemakers
[not found] ` <CACOoB6jE=DgpYYaudhqTVDRd2SCz++aog7QYwTQs6-MAD8dBuw@mail.gmail.com>
2025-04-24 18:22 ` Aditya Garg
2025-04-24 19:20 ` Erik Huelsmann
2025-04-25 6:19 ` Julian Swagemakers
2025-04-25 6:25 ` Aditya Garg
2025-04-25 9:45 ` Aditya Garg
2025-04-25 10:17 ` Erik Hulsmann
2025-04-24 18:23 ` Aditya Garg
2025-04-24 7:53 ` [PATCH v5 2/3] send-email: retrieve Message-ID from outlook SMTP server Aditya Garg
2025-04-24 13:09 ` Greg Kroah-Hartman
2025-04-26 18:11 ` Yao Zi
2025-04-27 20:05 ` Aditya Garg
2025-04-28 4:16 ` Yao Zi
2025-04-27 19:44 ` Aditya Garg
2025-04-24 7:53 ` [PATCH v5 3/3] send-email: add option to generate passswords like OAuth2 tokens Aditya Garg
2025-04-24 12:28 ` Julian Swagemakers
2025-04-24 12:53 ` Aditya Garg
2025-04-24 15:20 ` Junio C Hamano
2025-04-24 15:46 ` Aditya Garg
2025-04-24 16:58 ` Junio C Hamano
2025-04-25 10:09 ` [PATCH v6 0/1] send-email: add oauth2 support and fix outlook breaking threads Aditya Garg
2025-04-25 10:09 ` [PATCH v6 1/1] send-email: retrieve Message-ID from outlook SMTP server Aditya Garg
2025-04-25 15:04 ` Aditya Garg
2025-04-25 16:22 ` Erik Huelsmann
2025-04-25 17:08 ` Junio C Hamano
2025-04-25 19:05 ` Erik Huelsmann
2025-04-25 19:08 ` Aditya Garg
2025-04-25 17:23 ` Junio C Hamano
2025-04-25 19:05 ` Aditya Garg
2025-04-26 8:36 ` Aditya Garg
2025-04-26 9:03 ` Eric Sunshine
2025-04-26 17:40 ` Aditya Garg
2025-04-28 16:52 ` Junio C Hamano
2025-04-28 17:52 ` [PATCH] send-email: add --smtp-outlook-id-tweak option Aditya Garg
2025-04-28 17:57 ` [PATCH v2] " Aditya Garg
2025-04-28 20:47 ` Junio C Hamano
2025-04-29 3:44 ` Aditya Garg
2025-04-29 10:52 ` [PATCH v3] send-email: add --[no-]outlook-id-fix option Aditya Garg
2025-04-29 11:00 ` Aditya Garg
2025-04-29 15:57 ` Junio C Hamano
2025-04-29 16:24 ` Junio C Hamano
2025-04-29 16:26 ` Aditya Garg
2025-04-29 16:37 ` [PATCH v4] " Aditya Garg
2025-04-29 23:08 ` Junio C Hamano
2025-04-30 8:31 ` Aditya Garg
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=xmqq5xiuzp1y.fsf@gitster.g \
--to=gitster@pobox.com \
--cc=gargaditya08@live.com \
--cc=git@vger.kernel.org \
--cc=julian@swagemakers.org \
--cc=mirth.hickford@gmail.com \
--cc=sandals@crustytoothpaste.net \
--cc=wiagn233@outlook.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.