diff --git a/java/com/google/gerrit/server/mail/send/EmailResource.java b/java/com/google/gerrit/server/mail/send/EmailResource.java
new file mode 100644
index 0000000..169ab4b
--- /dev/null
+++ b/java/com/google/gerrit/server/mail/send/EmailResource.java
@@ -0,0 +1,39 @@
+// Copyright (C) 2023 The Android Open Source Project
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package com.google.gerrit.server.mail.send;
+
+import com.google.auto.value.AutoValue;
+import com.google.protobuf.ByteString;
+
+/**
+ * Email resource that can be attached to an email.
+ *
+ * <p>Can be used for images included in html body of the email.
+ */
+@AutoValue
+public abstract class EmailResource {
+  public static EmailResource create(String contentId, String contentType, ByteString content) {
+    return new AutoValue_EmailResource(contentId, contentType, content);
+  }
+
+  /** Value of Content-ID header used for referring to the resource from html body of the email. */
+  public abstract String contentId();
+
+  /** MIME type of the resource. */
+  public abstract String contentType();
+
+  /** Unencoded data that should be added to the email */
+  public abstract ByteString content();
+}
diff --git a/java/com/google/gerrit/server/mail/send/EmailSender.java b/java/com/google/gerrit/server/mail/send/EmailSender.java
index 711ab1b..51629c6 100644
--- a/java/com/google/gerrit/server/mail/send/EmailSender.java
+++ b/java/com/google/gerrit/server/mail/send/EmailSender.java
@@ -57,6 +57,34 @@
   }
 
   /**
+   * Sends an email message. Messages always contain a text body, but messages can optionally
+   * include an additional HTML body and related resources. If both body types are present, {@code
+   * send} should construct a {@code multipart/alternative} message with an appropriately-selected
+   * boundary. If the HTML Resources are provided then html body and corresponding resources should
+   * be grouped as {@code multipart/related}.
+   *
+   * @param from who the message is from.
+   * @param rcpt one or more address where the message will be delivered to. This list overrides any
+   *     To or CC headers in {@code headers}.
+   * @param headers message headers.
+   * @param textBody text to appear in the {@code text/plain} body of the message.
+   * @param htmlBody optional HTML code to appear in the {@code text/html} body of the message.
+   * @param htmlResources optional resources that can be referenced in HTML code using their {@link
+   *     EmailResource#contentId}.
+   * @throws EmailException the message cannot be sent.
+   */
+  default void send(
+      Address from,
+      Collection<Address> rcpt,
+      Map<String, EmailHeader> headers,
+      String textBody,
+      @Nullable String htmlBody,
+      Collection<EmailResource> htmlResources)
+      throws EmailException {
+    send(from, rcpt, headers, textBody, htmlBody);
+  }
+
+  /**
    * Sends an email message with a text body only (i.e. not HTML or multipart).
    *
    * <p>Authors of new implementations of this interface should not use this method to send a
diff --git a/java/com/google/gerrit/testing/FakeEmailSender.java b/java/com/google/gerrit/testing/FakeEmailSender.java
index 918a622..a2ebc88 100644
--- a/java/com/google/gerrit/testing/FakeEmailSender.java
+++ b/java/com/google/gerrit/testing/FakeEmailSender.java
@@ -26,6 +26,7 @@
 import com.google.gerrit.exceptions.EmailException;
 import com.google.gerrit.mail.MailHeader;
 import com.google.gerrit.server.git.WorkQueue;
+import com.google.gerrit.server.mail.send.EmailResource;
 import com.google.gerrit.server.mail.send.EmailSender;
 import com.google.inject.AbstractModule;
 import com.google.inject.Inject;
@@ -63,9 +64,15 @@
         Collection<Address> rcpt,
         Map<String, EmailHeader> headers,
         String body,
-        String htmlBody) {
+        String htmlBody,
+        Collection<EmailResource> htmlResources) {
       return new AutoValue_FakeEmailSender_Message(
-          from, ImmutableList.copyOf(rcpt), ImmutableMap.copyOf(headers), body, htmlBody);
+          from,
+          ImmutableList.copyOf(rcpt),
+          ImmutableMap.copyOf(headers),
+          body,
+          htmlBody,
+          ImmutableList.copyOf(htmlResources));
     }
 
     public abstract Address from();
@@ -78,6 +85,8 @@
 
     @Nullable
     public abstract String htmlBody();
+
+    public abstract ImmutableList<EmailResource> htmlResources();
   }
 
   private final WorkQueue workQueue;
@@ -105,7 +114,7 @@
   public void send(
       Address from, Collection<Address> rcpt, Map<String, EmailHeader> headers, String body)
       throws EmailException {
-    send(from, rcpt, headers, body, null);
+    send(from, rcpt, headers, body, null, ImmutableList.of());
   }
 
   @Override
@@ -116,7 +125,19 @@
       String body,
       String htmlBody)
       throws EmailException {
-    messages.add(Message.create(from, rcpt, headers, body, htmlBody));
+    messages.add(Message.create(from, rcpt, headers, body, htmlBody, ImmutableList.of()));
+  }
+
+  @Override
+  public void send(
+      Address from,
+      Collection<Address> rcpt,
+      Map<String, EmailHeader> headers,
+      String body,
+      String htmlBody,
+      Collection<EmailResource> htmlResources)
+      throws EmailException {
+    messages.add(Message.create(from, rcpt, headers, body, htmlBody, htmlResources));
   }
 
   public void clear() {
