How to Embed an Image in an Email in Power Automate (3 Ways)

A marketing coordinator I worked with wanted the company logo at the top of every automated welcome email. Her first attempt linked to the logo in SharePoint, and it looked perfect in her own inbox. Every new customer saw a broken image icon instead, because they couldn’t sign in to the company’s SharePoint.

There are three ways to put an image inside a Power Automate email, and each behaves differently in different mail apps. In this tutorial, I’ll show you all three, explain when to use each, and cover the size limits that make images disappear.

Quick answer: In Send an email (V2), switch the Body to code view and add an <img> tag. For recipients outside your company, point it to a publicly accessible image URL. To embed the image itself, get the file with Get file content and use <img src="@{dataUri(body('Get_file_content'))}">. Keep embedded images small: the connector limits each one to 1 MB after encoding, and Microsoft suggests 100 KB or less.

Which method should you use?

MethodHow it worksBest for
Public URLThe email links to an image on a web server; the mail app downloads itNewsletters and external recipients
Data URI (base64)The image is encoded into the email’s HTMLSmall logos and icons, internal email
Attachment with cid:The image is attached and referenced by nameTesting only; not documented for this connector

For this tutorial, I stored the images in a SharePoint document library called Embed Images:

SharePoint Embed Images document library with a company logo image file

Method 1: Link to a public image

This is the most reliable option for people outside your organization. The image lives on a web server, and the email only contains a link to it. The important part is that the address must work without signing in. A SharePoint or OneDrive address usually doesn’t, which is why recipients see a broken image.

Host the image somewhere public, such as your website’s media library or a public blob storage container, and copy its address. Then, in Send an email (V2), select the </> icon to switch the Body to code view, and add:

<img src="https://www.contoso.com/images/logo.png" width="200" alt="Contoso logo">

Set a width so large images don’t overflow the email, and add alt text for people whose mail app blocks images.

Linking to a SharePoint image for internal email

If every recipient is in your organization and has access to the library, a SharePoint address can work. Get file metadata using path returns the file’s path:

Get file metadata using path action for a banner image in the Embed Images library

Build the image address from your site URL and the path:

Send an email V2 body in code view with an img tag built from the site address and file path

The recipient’s mail app still has to load the image with their credentials, which some apps don’t do, so test it with a colleague before relying on it.

Method 2: Embed the image as a data URI

A data URI puts the image itself into the email’s HTML as base64 text, so nothing has to be downloaded. Get the file with Get file content using path (SharePoint or OneDrive for Business):

Get file content using path action reading an image file

Then build the tag with the dataUri() function, in a Compose action or directly in the email body’s code view:

<img src="@{dataUri(body('Get_file_content_using_path'))}" width="200" alt="Company logo">
Compose action with an img tag using the dataUri expression

Put the Compose output in the email’s Body:

Send an email V2 action with the Compose output in the Body

The image appears in the message without an attachment:

Received email with the image embedded in the body

The same thing, written out

Some tutorials show a separate “base64 method” that builds the string by hand from Get file content. It produces exactly the same data:image/jpeg;base64,... text as dataUri():

<img src="data:@{body('Get_file_content')?['$content-type']};base64,@{body('Get_file_content')?['$content']}">
Send an email V2 body with an img tag built from the file content type and base64 content

Use whichever you find easier to read. Both need the Get file content action’s Infer Content Type set to Yes, which is the default, so the type is image/png or image/jpeg.

Size limits for embedded images

The Office 365 Outlook connector limits each data URI to 1 MB. Base64 makes a file 25 to 50 percent bigger, so anything over about 700 KB is likely to fail. Microsoft’s own email guidance suggests keeping inline images to 100 KB or less, and I’d aim for that: resize logos to the width they’ll be shown at and save them as PNG or compressed JPEG.

Mail apps also differ. Classic Outlook shows data URI images reliably, but there are reports of them appearing broken in the Outlook on the web reading pane and inconsistently in the new Outlook. Send a test to each app your recipients use.

Method 3: Attach the image and reference it with cid:

In classic email HTML, you can attach an image and show it inline with <img src="cid:filename">. You can try this in Power Automate: get the file content, add it under Attachments in Send an email (V2), and reference the same name in the body:

Compose action with an img tag that references the image by cid
Send an email V2 action with the image file added as an attachment

The Attachments parameter only has a Name and Content, with no Content-ID or inline setting, and Microsoft doesn’t document cid: images for this connector. Whether the image shows inline depends on the mail app, and it usually also appears as an attachment, as in this test:

Received email showing the image as an attachment and embedded in the body

If you do try it, make the name in cid: match the attachment’s Name exactly, including the extension, and avoid spaces in the file name.

What about the SharePoint SendEmail API?

Older tutorials send email with Send an HTTP request to SharePoint and _api/SP.Utilities.Utility.SendEmail. Microsoft retired that API on October 31, 2025, and it no longer sends messages. Use Send an email (V2) instead, or Send an email from a shared mailbox (V2) to send from a team address. See the Send an email (V2) guide for its options.

Troubleshooting

  • Broken image icon. The image address needs a sign-in, or the recipient’s app blocks external images. Use a public address or a data URI.
  • The HTML shows as text. You typed the tag in the rich text Body. Switch to code view (</>) first.
  • The image is missing or the flow fails. The embedded image is too large. Resize it well below 1 MB, ideally under 100 KB.
  • It works in one app but not another. Mail apps handle images differently; test in each one, and prefer a public URL for external mail.

These Power Automate email tutorials go further:

Frequently Asked Questions

How do I embed an image in a Power Automate email?

Switch the Send an email (V2) Body to code view and add an img tag, either with a public image URL or with dataUri() and the file content. Microsoft lists the image size limit in the Office 365 Outlook connector known issues.

Why does my embedded image show as a broken icon?

The image address needs a sign-in, such as a SharePoint link, or the mail app blocks images. Use a publicly accessible image URL or embed the image as a data URI.

What’s the size limit for embedded images?

The Outlook connector allows 1 MB per data URI after base64 encoding, so keep source images under about 700 KB. Microsoft recommends 100 KB or less.

Can I still use the SharePoint SendEmail API?

No. Microsoft retired it on October 31, 2025. Use the Send an email (V2) action instead.