Советы по PHP : Отправка писем при помощи PHP : Как вставить в письмо картинку
смотрим также
Материал из Справочник Web-языков
Отправка писем при помощи PHP: Как вставить в письмо картинку
Допустим, у нас задача - вставить в письмо, отправляемое с сайта пользователю, свой баннер (кнопку).
Сделать это можно двумя способами:
- Первый - в HTML-коде письма указываем адрес картинки как на простой страничке <IMG src="https://spravkaweb.ru/img/88x31.gif">
В этом случае, если пользователь читает ваше письмо online, картинка благополучно загрузится с указанного сервера и отобразится в письме. Но если пользователь не в online, картинка загрузиться не сможет.
- Второй способ - это поместить картинку в само письмо как прикрепленный файл (более подробно о прикреплениb файлов к письму читайте здесь), присвоить этому файлу уникальный идентификатор, а затем в теле письма при указании адреса картинки сослаться на этот идентификатор.
Таким образом, в письмо можно вставлять не только изображения, но и flash-ролики, музыку, элементы ActiveX.
Конечно, при этом размер письма увеличится, но зато мы будем уверены, что пользователь точно увидит выставляемую картинку (если конечно в его почтовой программе не отключено отображение изображений).
Чтобы присвоить идентификатор картинке, надо в разделе письма, где она располагается, поместить следующий заголовок:
Content-ID: <идентификатор>
где идентификатор является строкой, которая будет уникальной для данного письма (по примеру параметра boundary заголовка Content-Type).
Теперь в самом письме можно в адресе картинки подставлять ее идентификатор.
<IMG src="cid:идентификатор">
Почтовая программа проанализирует его, извлечет из соответствующей секции картинку и покажет ее.
Вот как может выглядеть письмо:
Date: Sat, 13 Mar 2004 09:56:31 -0300 Subject: Отправка изображения From: "Evgen" <[email protected]> To: [email protected] Subject: Отправка изображения Mime-Version: 1.0 Content-Type: multipart/alternative; boundary="spravkaweb-1234" --spravkaweb-1234 Content-type: text/html; charset="windows-1251" Content-Transfer-Encoding: 8bit <h3>Привет</h3> Это проба отправки письма с прикрепленной картинкой.<BR> А вот и сама картинка:<BR> <img src="cid:spravkaweb_img_1"> --spravkaweb-1234 Content-Type: image/jpeg; name="5.jpg" Content-Transfer-Encoding:base64 Content-ID: <spravkaweb_img_1> /9j/4AAQSkZJRgABAQAAAQABAAD/2wBD .... --spravkaweb-1234--
Как и в случае с прикрепляемыми файлами, если нам заранее неизвестно, какой тип картинки будет прикреплен, заголовку Content-Type можно присвоить значение application/octet-stream.
Для закрепления этой темы напишем программу, которая отправляет письмо с картинкой:
<?php /* Зададим в переменной $file_name путь до вставляемой картинки. В нашем случае она находится в том же каталоге, что и файл отправки письма. Но вместо этого сюда можно подставить файл, полученный сценарием из . */ $file_name="5.jpg"; $subj="Отправка изображения"; $bound="spravkaweb-1234"; $headers="From: "Evgen"n"; $headers.="To: [email protected]"; $headers.="Subject: $subjn"; $headers.="Mime-Version: 1.0n"; $headers.="Content-Type: multipart/alternative; boundary="$bound"n"; $body="--$boundn"; $body.="Content-type: text/html; charset="windows-1251"n"; $body.="Content-Transfer-Encoding: 8bitnn"; $body.=" Привет
Это проба отправки письма с прикрепленной картинкой.
?>
А вот и сама картинка:
"; $body.="nn--$boundn"; $body.="Content-Type: image/jpeg; name="".basename($file_name).""n"; $body.="Content-Transfer-Encoding:base64n"; $body.="Content-ID:nn"; $f=fopen($file_name,"rb"); $body.=base64_encode(fread($f,filesize($file_name)))."n"; $body.="--$bound--nn"; mail("[email protected]", $subj, $body, $headers);
Хочу отметить, что аналогичным образом в письмо можно вставлять не только картинки, но, например, flash-ролики, звук, и другие элементы, которые должны погружаться к странице из файлов.