手軽屋
ツール一覧

HTMLメールに画像をインライン埋め込みする方法

メール本文に画像を「外部リンク参照ではなく中身で持たせる」2つの方式:Base64のData URIとcid:参照。どちらが何のクライアントで映るか、配信先別の選び方を整理しました。

なぜ画像URLを直書きしてはいけないか

<img src="https://yoursite.com/logo.png"> のように外部URLを書いた画像は、メールクライアント側で「画像の表示」をクリックされないと出ません(Gmail・Outlook・iOS Mail全てデフォルトでブロック)。「迷惑メールかも」と疑われている状態で表示されないと、本文の意図が伝わりません。インライン埋め込みならクリック不要で確実に表示されます。

方式1:Data URI(Base64)

<img src="data:image/png;base64,iVBORw0KGgo..."> の形でHTML本文の中に直接Base64で画像を埋め込みます。RFC 2397準拠で、現代の多くのWebメールが対応。

B2Bの取引先がOutlookデスクトップ版を使っている場合、Data URIだけだと「画像が表示されない」と問い合わせが来ます。

方式2:cid:参照(MIME multipart/related)

画像をメールにMIME添付し、本文HTMLからは<img src="cid:logo.png">のようにContent-IDで参照する方式。RFC 2392準拠。

Outlook対応が必須なB2Bやメルマガではcid:参照が標準です。HTMLメール送信ライブラリ(Nodemailer・PHPMailer・SendGrid・AWS SES等)には cid: をサポートする attachments: [{filename, content, cid}] のようなオプションが必ず用意されています。

配信先別の選び方

サイズ上限の現実的な目安

メール添付ファイルのサイズ制限は本ツールのメール添付PDF記事にも書きましたが、画像インライン埋め込みでも同じ制限がかかります。

Base64のData URIは元バイナリの+33%膨張するので、本体画像は数十KB以下に圧縮するのが現実的。画像圧縮で長辺800px・80%圧縮にしてからBase64化すると、ロゴ画像でも10〜20KB程度に収まります。

手順(Gmail向け配信の例)

  1. 送りたい画像を画像圧縮でPNG/JPGに軽量化。
  2. 画像⇔Base64変換で「Data URI付き」を選択してコピー。
  3. HTMLメールテンプレに<img src="...">のsrcに貼り付け。
  4. Gmailのテストアドレスに送信し、開封テスト。

関連ツール