私は、spypig.comのようなサービスを、電子メールに小さな画像を配置し、開かれたときとどこから来たのかを追跡しました。彼らは都市、国、IPアドレスなどを追跡します。これはどのように行われますか?PHPと画像を使った電子メールの追跡
- メールがいつ開かれたかはわかりますか?そして、画像はどのように生成されます ?
- どのようにIPアドレスが検出され、どのように から位置を知ることができますか?
私は、spypig.comのようなサービスを、電子メールに小さな画像を配置し、開かれたときとどこから来たのかを追跡しました。彼らは都市、国、IPアドレスなどを追跡します。これはどのように行われますか?PHPと画像を使った電子メールの追跡
基本的には、電子メールのHTML本体に、次のようになり<img>
タグが存在します:誰かが読み取ると
<img src="http://www.yoursite.com/tracker.php?id=123456" alt="" />
イメージを有効にした彼のメールは、tracker.php
に、id=123456
をパラメータとして渡してイメージをロードする要求を送信します。
このtracker.php
スクリプトは、サーバー上になり、そして、呼び出されたとき、それは以下となります。
id
パラメータを確認してください - とき購読者ごとに電子メールを生成すると、各電子メールに対して異なるid
が生成されます。
tracker.php
スクリプトは、それが呼ばれていたIPアドレスから知っている - 他のPHPスクリプトのように:
$ipAddress = $_SERVER['REMOTE_ADDR'];
そして、このIPアドレスから、あなたが見つけるためにジオロケーションサービスを使用することができます世界のどこから電子メールが開かれているのか。例のカップルとして
は、あなたがMaxMindを見てみることができ、または
あなたはid=123456
は、ある特定のメールアドレスに対応していることを知っているようにIPInfoDBが、これはあなたの加入者一人一人がどこにあるかを知ることができます。
私は完全に理解していないかもしれません。私は小さな画像の内容を返す必要がある理由を理解したかっただけです。このような「」があればどうなりますか?つまり、 'display:none'に設定されます。あなたはこれにいくつかの光を投げてください。 – Gnanam
イメージを返すのをスキップすることはできますが、壊れたイメージアイコンを表示するのは醜いでしょう。スパムフィルタは今日では非常に厳しいので、メールを表示することはお勧めできません。スパムフィルタは迷惑メールフォルダにすぐに移動したり、拒否することもできます悪意のあるテキストやコードを隠す白い背景の上に白いテキストを使っても、この動作が引き起こされる可能性があります – aleation
'tracker.php'から' image'を返す方法は? –
質問の最初の部分について、私が行ったことはPHPファイルから画像を返すことでした。画像を返すこと(1x1ピクセルの透明なpngにすることができます)以外に、すべての情報をデータベースに記録します。このようにして、PHPファイルが呼び出されると、イメージが読み込まれた、つまり電子メールが読み込まれたことがわかります。問題は、近代的なクライアントの多くが画像を自動的に読み込まないということです。これは、プライバシーの理由から、あなたがやろうとしているものだけを許可しないことです。
2番目の部分については、IPを送信してジオロケーションを取得するジオロケーションWebサービスがいくつかあります。 1x1ピクセルイメージを返すPHPファイルでこれを行うことができます。ここ は、このサイト上でこの程度の良いスレッドです: Geolocation web service recommendations
私は画像を非表示にするには、先端を探していた、最も簡単な方法はあるようです。
<img src="http://www.yoursite.com/tracker.php?id=123456" alt="" width="1" height="1" border="0">
パスカルの華麗な説明を完了すること。
1. Eメールでのトラッカーiamge
<img src="http://www.yoursite.com/tracker.php?eid=123456&uid=123" alt="" width="1px" height="1px">
その作業は、メール開いたら、トラッカーの画像をダウンロード用画像のためtracker.phpするリクエストを送信し、非常に簡単です、我々ユーザーデータフォームのデータを取得し、読み取られたものとして考慮します。
注:display:none;を使用しないでください。あなたのイメージを隠すためのプロパティ、それはスパムアルゴリズムでフィルタリングすることがあります。そして場所に任意のjavasriptコードをいけない、それはまた、スパムフィルタにtracker.php
<?php header("Content-Type: image/jpeg"); // it will return image readfile("img.jpg"); dbfunction(); // place your db code ?>
3.オン
2をブロックする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場所:
場所は、ジオロケーションサービスにより取得し、あなたがnekudo、freegeoipのようなオープンソースのジオロケーションファインダーを使用することができます。 examle
<?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'];
?>
私は間違っているかもしれませんが、ipecho-partをサーバー上で呼び出さなければならないので、サーバーのIPアドレスしか取得できません。 – andeersg
そして、あなたがこれを行うにはしたくないため
?大量の電子メールクライアントがこのウェブバグをチェックして表示しないので、深刻なアプリケーションではこれに頼ることはできません。 – martinstoeckli