The Problem
Many Power Automate users struggle with creating reliable links to specific emails in Microsoft 365. When building flows triggered by incoming emails, you often need to include a link that opens the original email directly in Outlook Web.
Most documented solutions either:
- Open Outlook Web without displaying the specific email
- Result in an infinite loading spinner
- Stop working after Microsoft updates
Our Discovery
After extensive testing, we've discovered a reliable method that works consistently in standard Microsoft 365 environments. The key insight is that Microsoft seems to use a hybrid URL system that requires the email ID to appear in two places in the URL.
The Working Solution
The most reliable URL format:
https://outlook.office.com/mail/deeplink/read/EMAIL_ID?ItemID=EMAIL_ID&exvsurl=1
In Power Automate, use this syntax:
For text fields (email body, etc.):
https://outlook.office.com/mail/deeplink/read/@{encodeURIComponent(triggerOutputs()?['body/id'])}?ItemID=@{encodeURIComponent(triggerOutputs()?['body/id'])}&exvsurl=1
For expression fields (initialize variable):
concat('https://outlook.office.com/mail/deeplink/read/', encodeURIComponent(triggerOutputs()?['body/id']), '?ItemID=', encodeURIComponent(triggerOutputs()?['body/id']), '&exvsurl=1')
If using a variable to store the email ID:
https://outlook.office.com/mail/deeplink/read/@{encodeURIComponent(variables('emailID'))}?ItemID=@{encodeURIComponent(variables('emailID'))}&exvsurl=1
Why This Works
Our investigation revealed that Microsoft now redirects from older OWA formats to the newer deeplink format but maintains compatibility by:
Placing the email ID in the URL path (
/deeplink/read/ID)
- Duplicating the same ID as a query parameter (
?ItemID=ID)
- Preserving the
exvsurl=1 parameter which forces the email to open directly
This peculiar dual-ID system isn't documented but appears to be how Microsoft maintains backward compatibility while modernizing their URL structure.
Other Formats We Tested
| Format |
Result |
/mail/inbox/id/EMAIL_ID |
Opens Outlook without the specific email |
/mail/deeplink/message/EMAIL_ID |
Infinite loading spinner |
/owa/?ItemID=EMAIL_ID&viewmodel=ReadMessageItem |
Works but redirects |
/mail/readmessage?id=EMAIL_ID |
Opens Outlook without the specific email |
Critical Elements for Success
- Proper encoding: Always use
encodeURIComponent() for the email ID
- Duplicate ID: Include the ID in both locations
- exvsurl parameter: Include
&exvsurl=1 to force direct opening
By using this undocumented but reliable approach, you can create consistent direct links to emails in your Power Automate flows.