web
You’re offline. This is a read only version of the page.
close
Skip to main content

Notifications

Announcements

Community site session details

Community site session details

Session Id :
Power Platform Community / Forums / Power Automate / Creating Direct Links ...
Power Automate
Unanswered

Creating Direct Links to Outlook Emails in Power Automate - The Dual-ID Method That Actually Works

(5) ShareShare
ReportReport
Posted on by 1

Creating Direct Links to Outlook Emails in Power Automate

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)
  1. Duplicating the same ID as a query parameter (?ItemID=ID)
  2. 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

  1. Proper encoding: Always use encodeURIComponent() for the email ID
  2. Duplicate ID: Include the ID in both locations
  3. 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.

Categories:
I have the same question (3)
  • ronaldwalcott Profile Picture
    3,847 Super User 2025 Season 2 on at
    Thank you
  • DeanRoberts Profile Picture
    37 on at
    The output of Get Emails (V3) contains an id, internetMessageId, and a conversationId.   When I use the value for id in the URL you provided, I get a message saying "The message may have been moved or deleted".   When you refer to "Email ID", which of these are you suggesting?  I've tried several email ids and they all return the same results.
  • Power Platform 1919 Profile Picture
    1,890 on at
    Hi @DeanRoberts

    this is the standard url format for email preview in web outlook (this works for most of the cases).
     
    https://outlook.office365.com/owa/?ItemID=AAMkADY1YmE3N2FhLWEwMzQtNDNkMC04Mzg3LTczMT........................hhhhh&exvsurl=1&viewmodel=ReadMessageItem
     
    here ItemId should uri encoded of "id" property .

    example expression.
     
     
    concat('https://outlook.office365.com/owa/?ItemID=', 
    encodeURIComponent(triggerOutputs()?['body/id']), 
    '&exvsurl=1&viewmodel=ReadMessageItem')
    use this power automate expression , you can get web outlook preview link for the specific email.
     

Under review

Thank you for your reply! To ensure a great experience for everyone, your content is awaiting approval by our Community Managers. Please check back later.

Helpful resources

Quick Links

Forum hierarchy changes are complete!

In our never-ending quest to improve we are simplifying the forum hierarchy…

Ajay Kumar Gannamaneni – Community Spotlight

We are honored to recognize Ajay Kumar Gannamaneni as our Community Spotlight for December…

Leaderboard > Power Automate

#1
Michael E. Gernaey Profile Picture

Michael E. Gernaey 523 Super User 2025 Season 2

#2
Tomac Profile Picture

Tomac 406 Moderator

#3
abm abm Profile Picture

abm abm 245 Most Valuable Professional

Last 30 days Overall leaderboard