Отправка писем с картинками в тексте

Не редко необходимо отправлять письма, в которых помимо текста должна быть отправлена html-верстка с картинками. Реализовать отображение картинок можно двумя способами: прописывать для картинок полные пути – загрузка изображений будет происходить с уделенного сайта. Или отправлять картинки вместе с письмом. Второй способ работает более корректно, поскольку при загрузке изображений с удаленных сайтов некоторые почтовые программы блокируют отображение. Для верстки письма используются все те же теги и стили, что и при обычной верстке, за исключением того, что стили должны находиться в самой верстке, а не в подключаемых файлах. Еще одно отличие – это то, что для изображений(img) в атрибутах src необходимо прописывать не путь, а CID изображения. CID — Content-ID будет указывать на картинку, которую необходимо предварительно закодировать в base64 и отправим вместе с письмом. Как отправлять письма с вложениями, было подробнее описано в предыдущем рецепте – «Отправка письма с вложениями».

Пример:
// картинки 
$attach = array( 
    '/imgs/1.jpg', 
    '/imgs/2.jpg' 
); 
// чтобы отображалась картинка и ее не было в аттаче 
// путь к картинке задается через CID: - Content-ID 
// тестовая верстка письма 
$text = ' 
    <div style="width: 700px; margin: 0 auto;"> 
        <h1>тело письма с картинкой</h1> 
        <h2>Блок по центру</h2> 
        <p> 
        <img style="float: left;" src="cid:1.jpg" /> 
    Какой-то текст вокруг картинки.  
    Какой-то текст вокруг картинки.  
    Какой-то текст вокруг картинки.  
    Какой-то текст вокруг картинки. 
        <br/> 
        <img style="float: left;" src="cid:2.png" /> 
        Какой-то текст вокруг картинки.  
    Какой-то текст вокруг картинки.  
    Какой-то текст вокруг картинки.  
    Какой-то текст вокруг картинки. 
        </p> 
    </div>
'; 
  
// E-mail отправителя 
$from = "test@test.com"; 
// E-mail получателя 
$to = "test_2@test.com"; 
// Тема письма 
$subject = "Тема письма"; 
  
// Заголовки письма === >>> 
$headers = "From: $from\r\n"; 
//$headers .= "To: $to\r\n"; 
$headers .= "Subject: $subject\r\n"; 
$headers .= "Date: " . date("r") . "\r\n"; 
$headers .= "X-Mailer: zm php script\r\n"; 
$headers .= "MIME-Version: 1.0\r\n"; 
$headers .="Content-Type: multipart/alternative;\r\n"; 
// генерируем базовый разделитель 
$baseboundary = "------------" . md5(microtime()); 
$headers .= "  boundary=\"$baseboundary\"\r\n"; 
// <<< ==================== 
  
// Тело письма === >>> 
$message  =  "--$baseboundary\r\n"; 
$message .= "Content-Type: text/plain;\r\n"; 
$message .= "Content-Transfer-Encoding: 7bit\r\n\r\n"; 
$message .= "--$baseboundary\r\n"; 
// генерируем разделитель для картинок 
$newboundary = "------------" . md5(microtime()); 
$message .= "Content-Type: multipart/related;\r\n"; 
$message .= "  boundary=\"$newboundary\"\r\n\r\n\r\n"; 
$message .= "--$newboundary\r\n"; 
$message .= "Content-Type: text/html; ". 
"charset=utf-8\r\n"; 
$message .= "Content-Transfer-Encoding: 7bit\r\n\r\n"; 
$message .= $text . "\r\n\r\n"; 
// <<< ============== 
  
// прикрепляем файлы ===>>> 
foreach($attach as $filename){ 
    $mimeType='image/png'; 
    // получаем картинку 
    $fileContent = file_get_contents($filename,true);
    $filename = basename($filename); 
    $message.="--$newboundary\r\n"; 
    $message.="Content-Type: $mimeType;\r\n"; 
    $message.=" name=\"$filename\"\r\n"; 
    $message.="Content-Transfer-Encoding: base64\r\n"; 
    $message.="Content-ID: <$filename>\r\n"; 
    $message.="Content-Disposition: inline;\r\n"; 
    $message.=" filename=\"$filename\"\r\n\r\n"; 
    // кодируем картинку 
  $message.= 
chunk_split(base64_encode($fileContent)); 
} 
// <<< ==================== 
  
// заканчиваем тело письма, дописываем разделители 
$message.="--$newboundary--\r\n\r\n"; 
$message.="--$baseboundary--\r\n"; 
  
// отправка письма 
$result = mail($to, $subject, $message , $headers); 
if($result){ 
  echo "Письмо успешно отправлено!"; 
}else{ 
  echo "Письмо не отправлено!"; 
}
Теги:
CID, base64
Добавлено: 30 Марта 2018 07:08:31 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...