Building custom solutions that extend, automate, and integrate Microsoft 365 apps.
Good day, and I appreciate the detailed description of your issue.
Regarding to your concerns:
Regarding to Exchange/Graph assign a new conversationId for external replies.
Based on my research, Exchange conversation threading is primarily driven by the MAPI property PidTagConversationIndex, which is exposed via APIs as conversationIndex (Thread‑Index).
This property is generated and maintained by Outlook/Exchange and is the authoritative mechanism used internally to determine conversation grouping.
Exchange uses a proprietary threading model (Thread-Index), not the standard RFC headers. When emails come from external systems that do not preserve this property, Exchange cannot reliably associate them with the original conversation and therefore creates a new conversationId.
Reference: Work with conversations by using EWS in Exchange
Behavior with External Senders
As a forum moderator, my support is limited to Microsoft technologies. I do not have visibility into third‑party systems, so I cannot ensure how external platforms generate or preserve threading metadata.
However, if the Thread‑Index header is not included, when a reply from an external sender reaches Exchange, it may not contain a valid Thread‑Index that matches an existing conversation. In this case, Exchange cannot reliably associate the message with the original thread. As a result, Exchange creates a new conversation, which leads to a new conversationId as I mentioned earlier.
Regarding Thread‑Index and whether Exchange falls back to RFC headers
As far as I know, Thread-Index (conversationIndex) is the dominant factor.
Exchange conversation grouping depends primarily on:
-
PidTagConversationIndex(Thread-Index) - Conversation topic (normalized subject)
If Thread-Index is missing or incompatible, Exchange does not reliably fall back to RFC headers (In-Reply-To, References) for grouping. These headers are preserved for transport purposes, but they are not used as the authoritative thread identity source for conversationId.
Graph API field that provides stable thread identity across external replies
Unfortunately, Microsoft Graph does not expose a first-class field that serves as a stable thread identifier across different senders or email systems.
Whether conversationId can ever be the same across two separate Exchange mailboxes
conversationId is scoped to a single mailbox. The same message delivered to multiple recipients may have different conversationId values in each mailbox.
You can refer via: Is the ConversationID in the message resource unique and immutable? - Microsoft Q&A
Regarding internetMessageId stability
The internetMessageId is an immutable identifier for a specific email message. It is assigned by the sending system and preserved by Exchange once the message is delivered. However, because every message (including replies) has its own unique Message‑ID, it cannot be used as a thread identifier. Instead, thread relationships must be derived from the In‑Reply‑To and References headers that link messages together.
Recommended Microsoft Graph approach for grouping email threads
Your current implementation, parsing In‑Reply‑To and References and matching them against stored internetMessageId values, is aligned with the recommended approach. This is necessary because Exchange conversation IDs are not designed to provide a stable cross‑system thread identity.
Please note that this summary is based on my own findings and may not fully address your concerns. To help you reach your goal more effectively, I recommend engaging with [GitHub Community Forum] for a deeper technical dive or to connect with individuals who have relevant experience and expertise. Some approaches may behave differently or be restricted depending on your specific environment and configuration. These forums include many experienced developers and Microsoft specialists who can assist with troubleshooting and guidance.
Apologies for redirecting you to the related development team support. As moderators in this community, we do not have access to your specific tenant configuration, and my testing environment is limited. Therefore, my guidance is based on available Microsoft documentation and resources. That said, I’ll do my best to provide additional insight where possible.
I hope this helps.
Please feel free to correct me if I misunderstood your request. If you have any additional concerns, feel free to comment below. I would be more than happy to assist.
Note: Please follow the steps in [our documentation] to enable e-mail notifications if you want to receive the related email notification for this thread.