2011-03-27 30 views
17

He visto el servicio como spypig.com colocando una pequeña imagen en el correo electrónico y el seguimiento cuando se abre y desde donde. Rastrean la ciudad, el país, la dirección IP, etc. ¿Cómo se hace esto?Seguimiento de correo electrónico con PHP e imagen

  1. ¿Cómo sabemos cuándo se abre el correo? ¿Y cómo se genera la imagen ?
  2. ¿Cómo se detecta la dirección IP y cómo es posible conocer la ubicación desde ?
+3

Y ¿qué es lo que quiere hacer con esto? Muchos clientes de correo electrónico comprueban estos webbugs de todos modos y no los muestran, por lo que no puede confiar en esto en una aplicación seria. – martinstoeckli

Respuesta

46

Básicamente, en el cuerpo HTML de su correo electrónico, habrá una etiqueta <img> que se vería así:

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

cuando alguien lee su correo, con imágenes habilitadas, el cliente de correo electrónico enviará una solicitud al tracker.php, para cargar la imagen, pasándola id=123456 como parámetro.


tracker.php Este script se encuentra a su servidor y, cuando se le llama, lo hará:

  • Comprobar el parámetro id,
  • usarlo para encontrar a la que corresponde dirección de correo electrónico que - cuando generando el correo electrónico para cada uno de sus suscriptores, habrá generado un id diferente para cada correo electrónico.
  • hacer algunas cosas - como el registro "e-mail 123456 se ha abierto", y algunas informaciones adicionales
  • devolver el contenido de una imagen pequeña; como un gif transparente 1x1


El guión tracker.php sabe desde qué dirección IP se le ha llamado - como cualquier otro script PHP:

$ipAddress = $_SERVER['REMOTE_ADDR']; 

Y, a partir de esta dirección IP, puede utilizar un servicio de geolocalización para encontrar desde donde en el mundo se ha abierto el correo electrónico.
Como un par de ejemplos, se puede echar un vistazo a MaxMind o IPInfoDB

Como usted sabe que id=123456 corresponde a una dirección de correo electrónico específica, esto permite averiguar dónde cada uno de sus suscriptores son.

+0

Puede ser que no haya entendido completamente. Solo quería entender por qué tenemos que devolver el contenido de una imagen pequeña. ¿Qué pasaría si tenemos esto como ''? Es decir, establecido en 'display: none'. ¿Podría por favor arrojar algo de luz sobre esto? – Gnanam

+0

Supongo que podría omitir la devolución de una imagen, pero será feo mostrar el icono de la imagen rota. Y no lo recomiendo usando la pantalla: ninguno en un correo electrónico, ya que los filtros de correo no deseado son bastante estrictos hoy en día y su uso podría hacer que su correo electrónico vaya directamente a la carpeta de spam o incluso rechazarlo, porque el filtro pensará que usted es ocultando texto o código malicioso. Incluso si se usa texto blanco sobre fondo blanco, se puede activar esta acción – aleation

+1

cómo devolver '' image' from 'tracker.php'? –

2

Sobre la primera parte de la pregunta, lo que hice fue devolver la imagen de un archivo php. Además de devolver una imagen (puede ser png transparente de 1x1 píxeles), se registra toda la información en la base de datos. De esta forma, cuando se invoca el archivo php, usted sabe que la imagen se cargó, es decir, se leyó el correo electrónico. El problema es que muchos clientes modernos no cargan imágenes de forma automática. Esto es para no permitir solo el tipo de cosas que intentas hacer, por razones de privacidad.

Sobre la segunda parte, hay varios servicios web de geolocalización, en los que envía una IP y obtiene la geolocalización. Puede hacerlo en el archivo php que devuelve la imagen de 1x1 píxeles. Aquí es un buen hilo sobre esto en este sitio: Geolocation web service recommendations

0

que estaba buscando una punta para ocultar la imagen, la forma más fácil parece hacer:

<img src="http://www.yoursite.com/tracker.php?id=123456" alt="" width="1" height="1" border="0"> 

para completar la brillante explicación de Pascal.

3

1. Coloque el iamge rastreador en el E-mail

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

Su funcionamiento es muy sencillo, una vez abierto el correo, la imagen rastreador enviar solicitud a tracker.php para una imagen para su descarga, Nosotros obtener datos de url de formulario de datos de usuario y considerar como se lee.

Nota: No utilizar pantalla: ninguna; propiedad para ocultar sus imágenes, puede filtrar por algoritmo de spam. Y no ponen ningún código JavaSript, que también bloquean filtrar el correo no deseado

2. En la tracker.php

<?php 
header("Content-Type: image/jpeg"); // it will return image 
readfile("img.jpg"); 

dbfunction(); // place your db code 
?> 

3. La dirección IP es llegar por la siguiente función.

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. Ubicación:

La ubicación es obtener los servicios de localización geográfica, puede utilizar el buscador de la geolocalización de código abierto como nekudo, freegeoip.

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

Tal vez estoy equivocado, pero la parte ipecho tendría que ser llamada al servidor, ¿así que solo obtendría la dirección IP del servidor? – andeersg

Cuestiones relacionadas