
Power Automate でメール本文に画像を貼り付けたい場合、URL リンクではなく Base64 形式で埋め込む方法が確実です。URL 方式は受信者の環境やセキュリティ設定によってブロックされることがありますが、Base64 埋め込みなら画像データがメール自体に含まれるため、確実に表示されます。Office 365 ユーザー写真・SharePoint ファイル・OneDrive のいずれにも同じパターンで対応できます。
Base64 埋め込みの仕組み
Base64 埋め込みは、HTML の <img> タグの src 属性に画像データを直接書き込む方式です。形式は次のようになります。
<img src="data:image/png;base64,[Base64文字列]" width="100" height="100">
data:image/png;base64, という固定ヘッダーの後に Base64 文字列を続けます。JPEG なら data:image/jpeg;base64,、GIF なら data:image/gif;base64, と画像形式に合わせて変更するだけです。URL が無効になる心配がなく、外部サーバーへのアクセスも不要なため、セキュリティポリシーが厳しい社内環境でも安定して表示できます。
旧デザイナーを使う理由
このフローを作るときは Power Automate の旧デザイナーを使ってください。新デザイナーには HTML コードビュー編集で入力内容が消えるバグがあり、メール本文の HTML を直接編集できません。旧デザイナーへの切り替えはフロー編集画面右上の「旧デザイナーに切り替える」から行えます。
Compose でデータ型を先に確認する
フロー開発の基本は、まず見てから式を書くです。画像取得アクションの直後に作成(Compose)アクションを挟み、出力内容を確認します。Office 365 ユーザー写真や SharePoint ファイルの取得結果は次のようなオブジェクト形式になっています。
{
"$content-type": "image/jpeg",
"$content": "/9j/4AAQSkZJRgABAQAAAQABAAD..."
}
この構造を確認してから式を組むことで、なぜ値が取れないのかという無駄なデバッグが減ります。Power Automate のフロー開発全体でこの習慣を持つことが、エラーに強い設計につながります。
base64() 関数でオブジェクトから文字列を取り出す
Power Automate のビルトイン関数 base64(アクション出力) は、上記のオブジェクトから自動的に Base64 文字列を抽出してくれます。もう一つの方法として outputs('アクション名')?['$content'] で $content フィールドを直接取り出すこともできます。
// 方法1: base64() 関数でラップ
base64(outputs('Get_user_photo'))
// 方法2: $content を直接取り出す
outputs('Get_user_photo')?['$content']
どちらも同じ結果になりますが、base64() 関数の方が記述がシンプルで、後から見てもわかりやすいです。
img タグに埋め込む(HTML コードビューの操作)
メールの送信(V2)アクションの Body 欄で、右上のコードビューボタンをクリックして HTML 編集モードに切り替えます。そこに次の形式で img タグを書き込みます。
<img src="data:image/jpeg;base64,@{base64(outputs('Get_user_photo'))}" width="80" height="80">
@{} は Power Automate の動的コンテンツ埋め込み構文です。固定の data:image/jpeg;base64, ヘッダーと Base64 値を連結するだけで、メール本文に動的な画像を埋め込めます。

Office 365 ユーザー写真を埋め込む
ユーザーのプロフィール写真を動的に埋め込む手順は次のとおりです。
- ユーザーの写真を取得する(Get user photo)アクションを追加し、User UPN や Email を指定する
- 作成(Compose)アクションで出力を確認する
base64(outputs('ユーザーの写真を取得する'))で Base64 文字列を取得する- メール本文の HTML コードビューに
<img src="data:image/jpeg;base64,@{base64(outputs('ユーザーの写真を取得する'))}" width="50" height="50">を書き込む
承認メールに承認者の顔写真を表示したり、通知メールに送信者のプロフィール画像を添えたりする場面で使えるパターンです。
SharePoint・OneDrive のファイルを埋め込む
SharePoint や OneDrive に保存された画像ファイルを埋め込む場合は、パスを使用してファイル コンテンツを取得(Get file content using path)アクションで取得します。返ってくるオブジェクト形式はユーザー写真と同じなので、手順は同一です。
<img src="data:image/png;base64,@{base64(outputs('パスを使用してファイル_コンテンツを取得'))}" width="200">
OneDrive や Azure Blob Storage も同じパターンで対応できます。画像ソースが変わってもオブジェクトを base64() でラップして img タグに渡すロジックは共通です。HTML テーブルをメールに送信するパターンについてはPower Automate HTML テーブル送信の記事も参考にしてください。
ファイルサイズと Terminate を使った開発効率化
Outlook が本文に表示できる Base64 サイズには上限があります。大きい画像ファイルで試す前に、必ず小さいファイルで動作確認を先に行ってください。本番で大きいファイルを渡してメールが届かないという事態を防げます。
開発中はフローの途中終了(Terminate)アクションを挟み、ステータスを成功に設定する方法が効果的です。メール送信をスキップして構造確認だけができ、テストのたびにメールボックスにメールが溜まらなくなります。確認が終わったら Terminate を削除して本番に備えます。
添付ファイルとしても送れる
Base64 コンテンツはメール本文への埋め込みだけでなく、添付ファイルとしても送れます。メールアクションの Attachments パラメーターに、名前とコンテンツをオブジェクト形式で渡します。
「本文に埋め込む(視覚的なメール)」と「ファイル添付(保存・転送しやすい形式)」は用途に応じて使い分けてください。組み合わせることも可能で、メール本文に画像を表示しつつ同じ画像をダウンロード用に添付する、という設計もできます。Power Apps からフローを呼び出してこのメールを送信するパターンについてはPower Apps から Outlook でメールを送信する記事と合わせて参照してください。
まとめ
Base64 埋め込みの流れは、画像取得 → Compose で確認 → base64() でラップ → img タグの src に埋め込む、の 4 ステップです。旧デザイナーを使うこと、Compose で出力を先に確認すること、この 2 点を守れば実装で詰まることはほとんどありません。ユーザー写真・SharePoint ファイル・OneDrive のいずれでも同じパターンで対応できるので、一度覚えればどこでも応用できます。