私はspypig.comのようなサービスが小さな画像を電子メールに入れ、それが開かれたとき、どこから来たかを追跡するのを見てきました。都市、国、IPアドレスなどを追跡します。これはどのように行われますか?
基本的に、メールのHTML本文には、次のような<img>
タグがあります。
<img src="http://www.yoursite.com/tracker.php?id=123456" alt="" />
誰かが画像を有効にしてメールを読むと、メールクライアントはtracker.php
にリクエストを送信して画像を読み込み、id=123456
をパラメータとして渡します。
このtracker.php
スクリプトはサーバー上にあり、呼び出されると、次のようになります。
id
パラメータを確認し、id
が生成されます。tracker.php
スクリプトは、他のPHPスクリプトと同様に、どのIPアドレスから呼び出されたかを認識しています。
$ipAddress = $_SERVER['REMOTE_ADDR'];
そして、このIPアドレスから始めて、地理位置情報サービスを使用して、世界中のどこから電子メールが開かれたかを知ることができます。
いくつかの例として、 MaxMind 、または IPInfoDB を見てみましょう。
id=123456
は特定の1つのメールアドレスに対応していることをご存知のとおり、これにより、サブスクライバーのそれぞれがどこにいるかがわかります。
1。トラッカー画像を電子メールに配置します
<img src="http://www.yoursite.com/tracker.php?eid=123456&uid=123" alt="" width="1px" height="1px">
その動作は非常に簡単です。メールが開かれると、そのトラッカー画像はリクエストをサーバーに送信します。そのリクエストから、userIDを使用して画像の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。場所:
場所は任意の地理位置情報サービスによって取得されています。オープンソースのGeoLocation Finderを 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'];
?>
質問の最初の部分について、私がしたことは、PHPファイルから画像を返すことでした。画像(1x1ピクセルの透明なpngの場合もあります)を返すことを除いて、すべての情報をこのように、PHPファイルが呼び出されると、画像が読み込まれたこと、つまり電子メールが読み込まれたことがわかります。問題は、最新のクライアントの多くが画像を自動的に読み込まないことです。これは、プライバシー上の理由から、ユーザーが実行しようとしていることだけを許可しないためです。
2番目の部分については、IPを送信してジオロケーションを取得するいくつかのジオロケーションWebサービスがあります。これは、PHPファイルで行うことができます。これは、このサイトのこのスレッドに関する良いスレッドです: ジオロケーションWebサービスの推奨事項
画像を非表示にするためのヒントを探していましたが、最も簡単な方法は次のようです:
<img src="http://www.yoursite.com/tracker.php?id=123456" alt="" width="1" height="1" border="0">
パスカルの見事な説明を完了する。