Я использую vanilla PHP для отправки писем со встроенными изображениями.Ядро кода выглядит следующим образом:
$from = "$from_name <$from_email>";
$reply = "$replyto_name <$replyto_email>";
$to = "$to_name <$to_email>";
$main_boundary = substr( sha1(rand()), 0, 20 );
$part_boundary = substr( sha1(rand()), 0, 20 );
$headers = "From: $from\n";
$headers .= "Reply-To: $reply\n";
$headers .= "X-Mailer: PHP script mailer\n";
$headers .= "MIME-Version: 1.0\n";
$headers .= 'Content-Type: multipart/alternative;'."\n".' boundary="'.$main_boundary.'"'."\n";
$message=
'This is a multi-part message in MIME format.
--'.$main_boundary.'
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
'.$msgTXT.'
--'.$main_boundary.'
Content-Type: multipart/related;
boundary="'.$part_boundary.'"
--'.$part_boundary.'
Content-Type: text/html; UTF-8
Content-Transfer-Encoding: 7bit
'.$msgHTML.'
--'.$part_boundary.'
Content-Type: image/png; name="logo.png"
Content-Transfer-Encoding: base64
Content-Disposition: inline; filename="logo.png"
Content-ID: <part1.logo.111@example.com>
<base64 encoded image here>
--'.$part_boundary.'
Content-Type: image/gif; name="logo2.gif"
Content-Transfer-Encoding: base64
Content-Disposition: inline; filename="logo2.gif"
Content-ID: <part2.logo.222@example.com>
<base64 encoded image here>
--'.$part_boundary.'--
--'.$main_boundary.'--
';
$mailsent = mail ($to, $subject, $message, $headers);
Что важно:
- объявить Content-Type как multipart / альтернативный
- использовать 2 граничных блока в качестве маркеров/ разделители для основной границы электронной почты и границы детали для компонентов электронной почты внутри основного региона.Обратите внимание, что он отправляет текстовое и альтернативное сообщение HTML.Все встроенные изображения должны быть в кодировке base64.Обратите внимание, что \ r \ n \ r \ n должен быть сохранен в том виде, в котором он работает для кода, он действует как разделитель, как определено в спецификациях RFC.Таким же образом можно использовать этот механизм для отправки электронных писем с вложениями, просто нужно выбрать правильный тип контента.