Как определить, читали письмо или нет

Рецепт №50. Из книги «128 рецептов php»
Перейти к оглавлению

Чтобы определить, читали отправленное письмо или нет, можно воспользоваться небольшой хитростью – отправить в письме картинку, которая будут подгружаться с удаленного сервера, и при обращении к этой картинке, можно реализовать вызов счетчика количества просмотров.

Для того чтобы при обращении к картинке на сервере выполнялся скрипт можно воспользоваться apache модулем mod_rewrite. Он позволит реализовать редирект с картинки на скрипт. Для этого достаточно добавить в корень сайта файл .htaccess с кодом:

<IfModule mod_rewrite.c>
    	RewriteEngine on
    	RewriteRule ([[:alnum:]]+).png$ img.php?em=$1 [L]
</IfModule>

Таким образом, при обращении к картинке с адресом:

<img src="http://site.ru/dGVzdEBtYWlsLnJ1.png"/>

будет вызван скрипт http://site.ru/img.php?em=dGVzdEBtYWlsLnJ1
Как вы уже наверняка обратили внимание, помимо вызова самого скрипта, происходит передача GET параметра em – имя картинки. Это сделано специально, с помощью этого параметра можно передавать любую необходимую информацию, например e-mail адрес получателя письма. В данном примере это закодированный, с помощью base64, e-mail получателя.
Остается только написать скрипт, который будет обрабатывать обращения и возвращать в ответ картинку и записывать статистику обращений:

// генерируем картинку и отдаем ее 
// создаем холст 1 на 1 пиксель
$image = imagecreatetruecolor(1,1); 
// делаем его белым
imagefill($image, 0, 0, 0xFFFFFF); 
// задаем заголовок для вывода картинки
header('Content-type: image/png'); 
// выводим картинку
imagepng($image); 
// очищаем память от картинки
imagedestroy($image); 
 
// проверяем наличие GET параметра
if(isset($_GET['em'])){
	// получили email пользователя, 
// который открыл письмо
	// разкодирем данные
    $email = base64_decode($_GET['em']); 
    
	// тут реализуем запись статистики
	// в файл или базу данных	
}

В рецепте был использован код для генерации картинки, об этом подробнее написано в V части сборника рецептов(«Графика»). Также была использована ранее не описанная функция base64_decode, она осуществляет декодирование данных закодированных с помощью функции base64_encode в формат base64.

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


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

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

*