使用 PHP 和图像跟踪电子邮件

2022-08-30 13:32:20

我已经看到像 spypig.com 在电子邮件中放置一个小图像并跟踪何时打开以及从哪里打开的服务。他们跟踪城市,国家,IP地址等。这是如何完成的?

  1. 我们如何知道邮件何时打开?图像是如何生成的?
  2. 如何检测IP地址以及如何从中知道位置?

答案 1

基本上,在电子邮件的HTML正文中,将有一个如下所示的标记:<img>

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

当有人在启用图像的情况下阅读他的邮件时,电子邮件客户端将向 发送请求以加载图像,并将其作为参数传递。tracker.phpid=123456


此脚本将位于您的服务器上,并且在调用时,它将:tracker.php

  • 检查参数,id
  • 使用它来查找它所对应的电子邮件地址 - 在为每个订阅者生成电子邮件时,您将为每封电子邮件生成一个不同的电子邮件。id
  • 做一些事情 - 比如记录“电子邮件123456已被打开”,以及一些额外的信息
  • 返回小图像的内容;就像一个1x1透明的gif。


该脚本知道它来自哪个IP地址 - 就像任何其他PHP脚本一样:tracker.php

$ipAddress = $_SERVER['REMOTE_ADDR'];

而且,从此IP地址开始,您可以使用地理定位服务来查找电子邮件从世界打开的位置。
举几个例子,你可以看看MaxMindIPInfoDB。

如您所知,对应于一个特定的电子邮件地址,这可以找出每个订阅者的位置。id=123456


答案 2

1. 将跟踪器图像放在电子邮件中

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

它的工作非常简单,一旦您的邮件打开,该跟踪器图像就会将请求发送到服务器,从该请求中,我们可以通过创建带有userID的图像URL来获取信息,并且还可以考虑该邮件是由用户读取的。

注意:不要使用显示器:无;用于隐藏图像的属性,它可能会通过垃圾邮件算法进行过滤。而且不要放置任何javascript代码,它还会阻止垃圾邮件过滤器

2. 在智能设备上.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查找器,如nekudofreegeoip

例如

<?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'];
?>

推荐