Отслеживание электронной почты с помощью PHP и изображений

Я видел такую ​​услугу, как spypig.com, размещающую небольшое изображение в электронном письме и отслеживание, когда оно открывается и откуда. Они отслеживают город, страну, IP-адрес и т. Д. Как это делается?

  1. Как мы узнаем, когда почта открыта? И как создается изображение?
  2. Как определяется IP-адрес и как можно узнать местоположение от него?

В основном, в теге HTML вашего письма будет <img> который будет выглядеть так:

 <img src="http://www.yoursite.com/tracker.php?id=123456" alt="" /> 

Когда кто-то читает его почту, с включенными изображениями, клиент электронной почты отправит запрос на tracker.php , чтобы загрузить изображение, передав ему id=123456 в качестве параметра.

Этот скрипт tracker.php будет на вашем сервере, и, когда он будет вызван, он будет:

  • Проверьте параметр id ,
  • Используйте его, чтобы найти, на какой адрес электронной почты он соответствует – при создании электронной почты для каждого из ваших подписчиков вы создадите id для каждого сообщения электронной почты.
  • Сделайте что-то вроде журнала «email 123456» , и некоторые дополнительные сведения
  • вернуть содержимое небольшого изображения; как 1×1 прозрачный gif.

Сценарий tracker.php знает, с какого IP-адреса он был вызван – как и любой другой скрипт PHP:

 $ipAddress = $_SERVER['REMOTE_ADDR']; 

И, начиная с этого IP-адреса, вы можете использовать услугу геолокации, чтобы узнать, откуда в мире было открыто электронное письмо.
Как несколько примеров, вы можете взглянуть на MaxMind или IPInfoDB

Как вы знаете, id=123456 соответствует одному конкретному адресу электронной почты, это позволяет узнать, где находится каждый из ваших подписчиков.

В первой части вопроса, что я сделал, было возвращено изображение из файла php. Помимо возврата изображения (он может быть прозрачным png 1×1 пикселя) записывает всю информацию в базу данных. Таким образом, когда вызывается php-файл, вы знаете, что изображение загружено, т.е. прочитано электронное письмо. Проблема в том, что многие современные клиенты не загружают изображения автоматически. Это не позволяет делать то, что вы пытаетесь сделать, в целях конфиденциальности.

Во второй части есть несколько веб-сервисов геолокации, где вы отправляете IP-адрес и получаете геолокацию. Вы можете сделать это в php-файле, который возвращает изображение размером 1×1. Вот хороший поток об этом на этом сайте: рекомендации веб-службы геолокации

1. Поместите трекер iamge на E-mail

 <img src="http://www.yoursite.com/tracker.php?eid=123456&uid=123" alt="" width="1px" height="1px"> 

Его работа очень проста. Как только ваша почта открыта, изображение трекера отправит запрос на tracker.php для загрузки изображения. Мы получаем данные о форме данных пользовательских данных и рассмотрим, как читается.

Примечание. Не используйте display: none; свойство скрывать ваши изображения, оно может фильтровать по алгоритму спама. И не помещайте никаких кодов javasript, он также блокирует спам-фильтр

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("https://freegeoip.net/json/$PublicIP"); $json = json_decode($json ,true); $country = $json['country_name']; $region= $json['region_name']; $city = $json['city']; ?> 

Я искал подсказку, чтобы скрыть изображение, самый простой способ:

 <img src="http://www.yoursite.com/tracker.php?id=123456" alt="" width="1" height="1" border="0"> 

чтобы завершить блестящее объяснение Паскаля.