Подтвердить что ты не робот

MIME, чтобы удовлетворить HTML, электронную почту, изображения и простой текст?

Ответ на Mail multipart/alternative vs multipart/mixed предполагает, что вложения должны быть одноранговыми сообщениями multipart/alternative, например:

  • многочастному/смешанная
    • многочастный/альтернативный
      • Текст/равнина
      • Текст /HTML
    • some/thing (расположение: вложение)
    • some/thing (расположение: вложение)
    • ...

Я бы хотел отправить электронное письмо с помощью html-части с некоторыми встроенными изображениями и простой текстовой альтернативой. Каков предпочтительный макет MIME для различных частей? Несколько вариантов отображаются в примере кода и в других вопросах, но которые лучше всего работали на практике? Моя склонность такова:

  • многочастный/альтернативный
    • Текст/равнина
    • многочастному/родственный
      • text/html (ссылки на изображения с помощью cid)
      • изображение /GIF
      • изображение /GIF
      • ...

Таким образом, изображения явно предназначены для рендеринга html-части. Полный пример этого:

From: Rich Example <[email protected]>
To: A Recipient <[email protected]>
Subject: An example of email with images and a plain alternative
MIME-Version: 1.0
Content-Type: multipart/alternative; boundary="outer-boundary"

This is a MIME-encoded message. If you are seeing this, your mail
reader is old.
--outer-boundary
Content-Type: text/plain; charset=us-ascii

This message might make you :) or it might make you :(

--outer-boundary
MIME-Version: 1.0
Content-Type: multipart/related;
  type="text/html"; start="<[email protected]>"; boundary="inner-boundary"

--inner-boundary
Content-Type: text/html; charset=us-ascii
Content-Disposition: inline
Content-ID: <[email protected]>

<html>
 <body>
  This message might make you
  <img src="cid:[email protected]" alt="smile">
  or it might make you
  <img src="cid:[email protected]" alt="frown">
 </body>
</html>

--inner-boundary
Content-Type: image/gif
Content-Disposition: inline
Content-Transfer-Encoding: base64
Content-ID: <[email protected]>

R0lGODlhEAAQAKEBAAAAAP//AP//AP//ACH5BAEKAAIALAAAAAAQABAAAAIzlA2px6IBw2
IpWglOvTahDgGdI0ZlGW5meKlci6JrasrqkypxJr8S0oNpgqkGLtcY6hoFADs=

--inner-boundary
Content-Type: image/gif
Content-Disposition: inline
Content-Transfer-Encoding: base64
Content-ID: <[email protected]>

R0lGODlhEAAQAKEBAAAAAAD//wD//wD//yH5BAEKAAIALAAAAAAQABAAAAIzlA2px6IBw2
IpWglOvTahDgGdI0ZlGW5meKlci75drDzm5uLZyZ1I3Mv8ZB5Krtgg1RoFADs=

--inner-boundary--

--outer-boundary--
4b9b3361

Ответ 1

Вы правы. Встроенные изображения должны храниться в mime-объекте multipart/related (RFC 2387), и предлагать несколько вариантов содержимого можно с помощью multipart/alternative (RFC 2046).
Для добавления вложений вы можете поместить всю структуру в multipart/mixed и добавить вложения.

  • многочастному/смешанная
    • многочастный/альтернативный
      • Текст/равнина
      • многочастному/родственный
        • Текст /HTML
        • изображение /GIF
        • изображение /GIF
    • some/thing (расположение: вложение)
    • some/thing (расположение: вложение)

Вы также можете использовать встроенное изображение в текстовых/простых сообщениях, но не все MUA поддерживают это. (Использовать ни один или расположение: встроенный)

  • многочастному/смешанная
    • text/plain (текст выше)
    • изображение /GIF
    • text/plain (текст ниже)

И я не знаю, как сочетать это с многостраничным/альтернативным HTML-адресом.