Я генерирую электронные письма в приложении PHP, которые прикрепляют несколько файлов к электронной почте HTML. Некоторые файлы представляют собой электронные таблицы Excel, некоторые файлы представляют собой логотипы компаний, которые необходимо встроить в HTML, чтобы они загружались по умолчанию с использованием идентификаторов контента и идентификаторов cid для ссылки на прикрепленные изображения.
Насколько я вижу, мой синтаксис правильный, но изображения никогда не загружаются встраиваемыми (однако они успешно прикреплены).
From: [email protected]
Reply-To: [email protected]
MIME-Version: 1.0
Content-type: multipart/mixed;boundary="d0f4ad49cc20d19bf96d4adf9322d567"Message-Id: <20150421165500.0A5488021B@server>
Date: Tue, 21 Apr 2015 12:54:59 -0400 (EDT)
--d0f4ad49cc20d19bf96d4adf9322d567
Content-type: text/html; charset=utf-8
Content-transfer-encoding: 8bit
<html>
Html message goes here, followed by email.<br/>
<img src="cid:mylogo" />
</html>
--d0f4ad49cc20d19bf96d4adf9322d567
Content-type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; name=excelsheet.xlsx
Content-Description: excelsheet.xlsx
Content-Disposition: attachment;
filename="excelsheet.xlsx"; size=24712;
Content-transfer-encoding:base64
[base64 encoded string goes here.]
--b19e863e2cf66b40db1d138b7009010c
Content-Type: image/jpeg;
name="mylogo.jpg"Content-transfer-encoding:base64
Content-ID: <mylogo>
Content-Disposition: inline;
filename="mylogo.jpg"; size=7579;
[base64 encoded string goes here.]
--b19e863e2cf66b40db1d138b7009010c--
Кто-нибудь может увидеть очевидную причину, по которой изображение не будет вставлено, как ожидалось?
РЕДАКТИРОВАТЬ
Обратите внимание, что это поведение не является общим для всех почтовых клиентов. Пока что только в Thunderbird отмечено.
Я заметил две проблемы:
Граница MIME противоречива. Для первого вложения это d0f4ad49cc20d19bf96d4adf9322d567
а потом b19e863e2cf66b40db1d138b7009010c
используется. Таким образом, технически второе вложение является «частью» первого вложения.
Если заменить все b19e863e2cf66b40db1d138b7009010c
от d0f4ad49cc20d19bf96d4adf9322d567
Thunderbird правильно определяет вложение изображения.
использование multipart/related
вместо multipart/mixed
, (увидеть RFC2387)
Multipart / related используется для указания того, что каждая часть сообщения является компонентом совокупного целого. Это для составных объектов, состоящих из нескольких взаимосвязанных компонентов — правильное отображение не может быть достигнуто путем индивидуального отображения составных частей. Сообщение состоит из корневой части (по умолчанию первой), которая ссылается на другие части в строке, которые, в свою очередь, могут ссылаться на другие части. На части сообщения обычно ссылается заголовок части «Content-ID». (увидеть Запись в Википедии для MIME multipart / related)
Других решений пока нет …