Определить, что пользователь прочитал письмо через php

Определить, что пользователь прочитал письмо через php

548

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

Обычно, чтобы узнать прочитано сообщение или нет - в тело письма внедряется маленькая картинка. Когда пользователь открывает письмо на чтение, эта картинка скачивается с вашего сайта. Здесь то мы и можем поймать пользователя на чтение. В путь имени картинки нужно вставить нужные параметры, например id пользователя. Так мы узнаем, кто именно прочитал письмо.

Рассмотрим механизм на примере. Пусть есть такое письмо:

<?php
$iduser = 12;
$to = "VASH_YAshik@mail.ru";
$charset = "utf-8";
$headerss ="Content-type: text/html; charset=$charset\r\n";
$headerss.="Date: ".date('D, d M Y h:i:s')."\r\n";
$msgotprav = "Сообщение пользователю!";
$msgotprav .= '<br /><img src="http://VASH_SAIT.RU/rimage/'.$iduser.'-'.uniqid(time()).'.png" style="text-align: center; width: 100%; height: 1px; display:none;" />';
mail($to, $subject, $msgotprav, $headerss);
?>

Здесь нет ничего сложного для понимания, кроме строки с картинкой. В ее названии мы вставляем $iduser - уникальный номер пользователя, которому отправляем сообщение. (Предполагается, что вы используете БД и за id юзера закреплены все данные, которые вам нужны для его распознания (имя, почта, телефон и т.д.)). После id идет тире и функция uniqid(time()), которая генерирует случайную числовую последовательность. Раньше я использовал одинаковые названия картинок, но оказалось, что Яндекс может их кэшировать. Поэтому для большего рендома поставил случайное имя картинке.

Итак после отправки сообщения пользователь откроет письмо и у него начнет грузиться картинка с вашего сайта по адресу: http://VASH_SAIT.RU/rimage/12-31241312312.png.

Но у нас не будет так много картинок - ведь все они будут с разными именами. Поэтому создадим простую картинку на лету. Для этого будем использовать файл image.php. А чтобы обратиться к нему и передать параметры для построения воспользуемся .htaccess.

Откройте или создайте если у вас нет файла .htaccess в корне сайта и пропишите для нашего случае следующее правило:

RedirectMatch 301 ^/rimage/(.*)\.png$ http://VASH_SAIT.RU/rimage/image.php?idemail=$1

Это правило позволит переадрисовать любую png картинку на адрес http://VASH_SAIT.RU/rimage/image.php?idemail=$1

Причем файл image.php будет получать параметр idemail, который равен имени картинки. В нашем случае это: 12-31241312312

Теперь посмотрим на image.php:

<?php
$image = imagecreate (500, 2);
$green = imagecolorallocate($image, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255)); //задаем цвет линии

$pizza = $_GET['idemail'];
$pieces = explode("-", $pizza);
$file = 'readpeople.txt'; // Открываем файл для получения существующего содержимого
$current = file_get_contents($file); // Добавляем нового человека в файл
$current .= $pieces[0]."\n"; // Пишем содержимое обратно в файл
file_put_contents($file, $current);

imagepng($image);
imagedestroy($image);
?>

В файле мы на лету создаем картинку, которую получает пользователь читающий письмо и одновременно добавляем в файл readpeople.txt id пользователя, который его прочитал. Ничего не помешает вам переделать этот скрипт и прописать вместо txt кода запись прямо в БД. Но все это очень индивидуально, поэтому оставляется на ваше усмотрение.

| | Определить, что пользователь прочитал письмо через php | Если вы собираетесь создавать рассылку, то думаю, вам будет интересно знать, какой пользователь прочитал письмо, а какой нет. Исходя из этого списка, | http://blogprogram.ru/wp-content/uploads/2017/01/548-131x131.jpg