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

Отправка писем с картинками на php Тема отправки писем очень часто встречается в повседневной жизни web-разработчиков, и я не могу оставить ее без внимания. Раньше я уже публиковал пару статей про отправку писем, но хочу написать еще одну. В этой статье я покажу как можно отправлять письма с html-версткой, в которой присутствуют картинки.

Если два способа отображения картинок в письме — подгружать картинки с сайта и отправлять картинки в письме. Первый способ — подгрузка с сайта, проще, но в нем возникают проблемы — не все почтовые агенты отображают содержимое, которое подтягивается с сайтов, картинки блокируются. В таком случае пользователю, чтобы увидеть картинки в письме, нужно будет постоянно разблокировать содержимое письма — это не удобно.
Второй способ отображения картинок в письме — это отправка картинок вместе с письмом. В данном случае, большинство почтовых агентов сразу показывают картинки. Этот способ мне нравится больше, и код именно этого способа отправки я и хочу показать.
Для верстки письма используются те же самые теги, что и для верстке в браузере. Чтобы отобразить в письме картинку нужно использовать тег . Единственное отличие будет в атрибуте SRC — в данном примере ему будет присвоен не путь к картинке, а CID картинки. CID — Content-ID будет указывать на картинку, которую мы предварительно закодируем и отправим вместе с письмом.
А теперь сам код, посмотрев который, вы окончательно поймете принцип отправки письма с картинками:

// картинки
$attach = array(
‘http://vk-book.ru/img/scroll_mouse.jpg’,
‘http://vk-book.ru/img/ugly.png’
);
// чтобы отображалась картинка и ее не было в аттаче
// путь к картинке задается через CID: — Content-ID
// тестовый текст
$text = ‘

тело письма с картинкой

Блок по центру


Какой-то текст вокруг картинки. Какой-то текст вокруг картинки. Какой-то текст вокруг картинки. Какой-то текст вокруг картинки.


Какой-то текст вокруг картинки. Какой-то текст вокруг картинки. Какой-то текст вокруг картинки. Какой-то текст вокруг картинки.

‘;

$from = «test@test.com»;
$to = «zhenikipatov@yandex.ru»;
$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 = «————» . strtoupper(md5(uniqid(rand(), true)));
$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 = «————» . strtoupper(md5(uniqid(rand(), true)));
$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); var_dump($result); [/php]

Рассказать друзьям:


Отправка писем с картинками на php: 7 комментариев

  1. Да, отлично работает, но есть одна неприятность, которую не могу победить. Если какой либо текст в письме начинать с новой строки, то в теле письма весь текст идет подряд. Допустим текст отредактировать так:
    Какой-то текст вокруг картинки.
    Какой-то текст вокруг картинки.
    Какой-то текст вокруг картинки.
    Какой-то текст вокруг картинки.
    В теле письма результат будет таким:
    Какой-то текст вокруг картинки. Какой-то текст вокруг картинки. Какой-то текст вокруг картинки. Какой-то текст вокруг картинки.

  2. В тебе сообщения видны разделители и заголовки, html как обычный текст. ЭТО РАБОЧИЙ КОД???
    И ещё не мешало бы сделать так, чтобы при ошибке введения кода безопасности не писать сообщение по новой — это первый класс.

  3. Да, код рабочий. Очень помог, спасибо автору!
    Это основа, а дальше можно хоть что придумывать, делать и первый класс и последний.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*