34

私は、spypig.com のようなサービスが電子メールに小さな画像を配置し、それがいつどこから開かれたかを追跡しているのを見てきました。彼らは都市、国、IP アドレスなどを追跡します。これはどのように行われますか?

  1. メールが開封されたことをどのように知ることができますか? そして、画像はどのように生成されますか?
  2. IP アドレスはどのように検出され、どのようにしてそこから位置を知ることができますか?
4

4 に答える 4

68

基本的に、メールの HTML 本文には、次の<img>ようなタグがあります。

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

画像が有効な状態で誰かがメールを読むと、メール クライアントは にリクエストを送信し、画像をロードしてパラメータとしてtracker.php渡します。id=123456


このtracker.phpスクリプトはサーバー上にあり、呼び出されると次のようになります。

  • idパラメータを確認し、
  • これを使用して、対応する電子メール アドレスを見つけます。購読者ごとに電子メールを生成するidと、電子メールごとに異なる電子メールが生成されます。
  • ログ「メール123456が開かれました」などのいくつかのことを行い、いくつかの追加情報
  • 小さな画像のコンテンツを返します。1x1 の透明な gif のように。


このtracker.phpスクリプトは、他の PHP スクリプトと同様に、どの IP アドレスから呼び出されたかを認識しています。

$ipAddress = $_SERVER['REMOTE_ADDR'];

そして、この IP アドレスから始めて、地理位置情報サービスを使用して、メールが世界中のどこから開封されたかを調べることができます。
いくつかの例として、MaxMindまたはIPInfoDBを見てください。

1 つの特定の電子メール アドレスに対応することがわかっているid=123456ように、これにより、各購読者がどこにいるかを知ることができます。

于 2011-03-27T09:50:47.837 に答える
18

1.トラッカー画像を電子メールに配置します

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

その仕組みは非常にシンプルです。メールが開かれると、そのトラッカー イメージがサーバーにリクエストを送信します。そのリクエストから、ユーザー ID を含む画像 URL を作成して情報を取得し、そのメールがユーザーによって読まれたと見なします。

注: display: none; は使用しないでください。画像を非表示にするためのプロパティで、スパム アルゴリズムによってフィルタリングされる場合があります。また、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. 場所:

場所は任意の地理位置情報サービスによって取得されます 。 nekudofreegeoipなどのオープンソースの GeoLocation finder を使用できます。

例えば

<?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'];
?>
于 2016-07-21T04:09:07.083 に答える
2

質問の最初の部分について、私がしたことは PHP ファイルから画像を返すことでした。画像 (1x1 ピクセルの透明な png の場合もあります) を返すだけでなく、すべての情報をデータベースに記録しています。このようにして、PHP ファイルが呼び出されると、画像が読み込まれた、つまり電子メールが読まれたことがわかります。問題は、最新のクライアントの多くが画像を自動的にロードしないことです。これは、プライバシー上の理由から、あなたがやろうとしているようなことだけを許可しないためです.

2 番目の部分については、いくつかのジオロケーション Web サービスがあり、IP を送信してジオロケーションを取得します。これは、1x1 ピクセルの画像を返す PHP ファイルで行うことができます。このサイトのこれに関する良いスレッドは次のとおりです: 地理位置情報 Web サービスの推奨事項

于 2011-03-27T09:47:15.583 に答える