Отслеживание электронной почты с помощью PHP и изображений
Я видел такую услугу, как spypig.com, размещающую небольшое изображение в электронном письме и отслеживание, когда оно открывается и откуда. Они отслеживают город, страну, IP-адрес и т.д. Как это делается?
- Как мы узнаем, когда почта открыта? И как изображение
генерируется?
- Как определяется IP-адрес и как можно узнать местоположение из
это?
Ответы
Ответ 1
В принципе, в теге HTML вашего письма будет тег <img>
, который будет выглядеть так:
<img src="http://www.yoursite.com/tracker.php?id=123456" alt="" />
Когда кто-то читает почту, с включенными изображениями, клиент электронной почты отправит запрос на tracker.php
, чтобы загрузить изображение, передав его id=123456
в качестве параметра.
Этот tracker.php
script будет на вашем сервере, и при вызове он будет:
- Проверьте параметр
id
,
- Используйте его, чтобы найти, на какой адрес электронной почты он соответствует - при создании электронной почты для каждого из ваших подписчиков вы создадите
id
по-разному для каждого сообщения электронной почты.
- Сделайте несколько вещей - например, журнал "email 123456 был открыт" и некоторые дополнительные сведения
- возвращает содержимое небольшого изображения; как прозрачный gif 1x1.
tracker.php
script знает, с какого IP-адреса он был вызван - как и любой другой PHP script:
$ipAddress = $_SERVER['REMOTE_ADDR'];
И, начиная с этого IP-адреса, вы можете использовать службу геолокации, чтобы узнать, откуда в мире было открыто электронное письмо.
В качестве примера можно привести MaxMind или IPInfoDB
Как вы знаете, id=123456
соответствует одному конкретному адресу электронной почты, это позволяет узнать, где находятся каждый из ваших подписчиков.
Ответ 2
1. Поместите изображение трекера на E-mail
<img src="http://www.yoursite.com/tracker.php?eid=123456&uid=123" alt="" width="1px" height="1px">
Его работа очень проста. После того, как ваша почта открыта, это изображение трекера отправляет запрос на сервер, из этого запроса мы можем получить информацию, создав URL-адрес изображения с идентификатором пользователя, а также посчитав, что почта прочитана пользователь.
Примечание: не используйте дисплей: нет; свойство для скрытия ваших изображений, оно может фильтровать по алгоритму спама. И не размещайте никакие коды JavaScript, он также блокирует спам-фильтр
2. На tracker.php
<?php
header("Content-Type: image/jpeg"); // it will return image
readfile("img.jpg");
dbfunction(); // place your db code
?>
3. IP-адрес получают с помощью следующей функции.
function get_client_ip() {
$ipaddress = '';
if (isset($_SERVER['HTTP_CLIENT_IP']))
$ipaddress = $_SERVER['HTTP_CLIENT_IP'];
else if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
$ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
else if(isset($_SERVER['HTTP_X_FORWARDED']))
$ipaddress = $_SERVER['HTTP_X_FORWARDED'];
else if(isset($_SERVER['HTTP_FORWARDED_FOR']))
$ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
else if(isset($_SERVER['HTTP_FORWARDED']))
$ipaddress = $_SERVER['HTTP_FORWARDED'];
else if(isset($_SERVER['REMOTE_ADDR']))
$ipaddress = $_SERVER['REMOTE_ADDR'];
else
$ipaddress = 'UNKNOWN';
return $ipaddress;
}
$PublicIP = get_client_ip();
4. Расположение:
Расположение определяется любыми службами геолокации, вы можете использовать поисковик GeoLocation с открытым исходным кодом, например nekudo,freegeoip.
например
<?php
$json = file_get_contents("http://ipinfo.io/$PublicIP/geo");
$json = json_decode($json ,true);
$country = $json['country_name'];
$region= $json['region_name'];
$city = $json['city'];
?>
Ответ 3
Что касается первой части вопроса, то, что я сделал, вернул изображение из файла PHP. Помимо возврата изображения (это может быть прозрачный png размером 1x1), запись всей информации в базу данных. Таким образом, когда вызывается PHP файл, вы знаете, что изображение было загружено, т.е. письмо прочитано. Проблема в том, что многие современные клиенты не загружают изображения автоматически. Это делается для того, чтобы не допускать того, что вы пытаетесь сделать, из соображений конфиденциальности.
Во второй части есть несколько веб-сервисов геолокации, где вы отправляете IP и получаете геолокацию. Вы можете сделать это в файле PHP, который возвращает изображение размером 1x1 пиксель.
Вот хорошая ветка об этом на этом сайте:
Рекомендации веб-службы геолокации
Ответ 4
Я искал подсказку, чтобы скрыть изображение, самый простой способ:
<img src="http://www.yoursite.com/tracker.php?id=123456" alt="" width="1" height="1" border="0">
чтобы завершить блестящее объяснение Паскаля.