J'ai vu le service comme spypig.com placer une petite image dans l'e-mail et effectuer le suivi de son ouverture et de son emplacement. Ils suivent la ville, le pays, l'adresse IP, etc. Comment cela se fait-il?
En gros, dans le corps HTML de votre email, il y aura une balise <img>
qui ressemblera à ceci:
<img src="http://www.yoursite.com/tracker.php?id=123456" alt="" />
Quand quelqu'un lit son courrier, avec les images activées, le client de messagerie envoie une demande à tracker.php
, pour charger l'image, en lui passant id=123456
en tant que paramètre.
Ce script tracker.php
sera sur votre serveur et, lorsqu'il sera appelé, il:
id
, id
différente pour chaque courrier électronique.
Le script tracker.php
sait à partir de quelle adresse IP il a été appelé - comme tout autre script PHP:
$ipAddress = $_SERVER['REMOTE_ADDR'];
Et, à partir de cette adresse IP, vous pouvez utiliser un service de géolocalisation pour savoir d'où le courrier électronique a été ouvert dans le monde.
Quelques exemples, vous pouvez regarder MaxMind ou IPInfoDB
Comme vous savez que id=123456
correspond à une adresse électronique spécifique, cela permet de savoir où se trouve chacun de vos abonnés.
1. Placez l’image de suivi sur l’e-mail
<img src="http://www.yoursite.com/tracker.php?eid=123456&uid=123" alt="" width="1px" height="1px">
Son fonctionnement est très simple. Une fois votre courrier ouvert, cette image de suivi envoie la demande au serveur. À partir de cette demande, nous pouvons obtenir des informations en créant l’URL de l’image avec l’identifiant de l’utilisateur, et aussi considérer que ce courrier est lu par l’utilisateur.
Remarque: n'utilisez pas display: none; propriété pour cacher vos images, il peut filtrer par algorithme de spam. Et ne placez aucun code javascript, il bloque également le filtre anti-spam
2. Sur le tracker.php
<?php
header("Content-Type: image/jpeg"); // it will return image
readfile("img.jpg");
dbfunction(); // place your db code
?>
3. L'adresse IP est obtenue par la fonction suivante.
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. Emplacement:
La localisation utilise tous les services de géolocalisation. Vous pouvez utiliser un outil de recherche de géolocalisation en source libre, tel que nekudo , freegeoip .
par exemple
<?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'];
?>
A propos de la première partie de la question, ce que j'ai fait était de retourner l'image à partir d'un fichier php. En plus de renvoyer une image (il peut s'agir d'un png transparent de 1 x 1 pixel), vous enregistrez toutes les informations dans la base de données. Ainsi, lorsque le fichier php est appelé, vous savez que l’image a été chargée, c’est-à-dire que le courrier électronique a été lu. Le problème est que beaucoup de clients modernes ne chargent pas les images automatiquement. Ceci pour ne pas autoriser le genre de chose que vous essayez de faire, pour des raisons de confidentialité.
À propos de la deuxième partie, il existe plusieurs services Web de géolocalisation, dans lesquels vous soumettez une IP et obtenez la géolocalisation. Vous pouvez le faire dans le fichier php qui renvoie l’image 1x1 pixel. Voici un bon fil à ce sujet sur ce site: Recommandations de services Web de géolocalisation
Je cherchais un conseil pour masquer l'image, le moyen le plus simple semble être le cas:
<img src="http://www.yoursite.com/tracker.php?id=123456" alt="" width="1" height="1" border="0">
pour compléter l'explication brillante de Pascal.