Saltar al contenido

Seguimiento de correo electrónico con PHP e imagen

El tutorial o código que encontrarás en este post es la resolución más rápida y válida que encontramos a esta inquietud o problema.

Solución:

Básicamente, en el cuerpo HTML de su correo electrónico, habrá un

etiqueta que se vería así:


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

Esta tracker.php La secuencia de comandos estará en su servidor y, cuando se llame, hará lo siguiente:

  • Compruebe el id parámetro,
  • Úselo para encontrar a qué dirección de correo electrónico corresponde; al generar el correo electrónico para cada uno de sus suscriptores, habrá generado un id diferente para cada correo electrónico.
  • Haz algunas cosas, como registrar “Se ha abierto el correo electrónico 123456”, y algunas informaciones adicionales
  • devolver el contenido de una imagen pequeña; como un gif transparente de 1×1.

El tracker.php el script sabe desde qué dirección IP se 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 averiguar en qué parte del mundo se ha abierto el correo electrónico.

Como un par de ejemplos, podría echar un vistazo a MaxMind o IPInfoDB

Como tu sabes que id=123456 corresponde a una dirección de correo electrónico específica, esto permite saber dónde se encuentra cada uno de sus suscriptores.

1. Coloque la imagen del rastreador en el correo electrónico.


Su funcionamiento es muy sencillo, una vez que tu correo está abierto, esa imagen de seguimiento envía la solicitud al servidor, de esa solicitud podemos obtener información creando la URL de la imagen con el ID de usuario, y también considerar como ese correo es leído por el usuario.

Nota: No use display: none; propiedad para ocultar sus imágenes, puede filtrar por algoritmo de spam. Y no coloque ningún código javascript, también bloquea el filtro de spam

2. En tracker.php


3. La dirección IP se obtiene mediante 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 se obtiene mediante cualquier servicio de geolocalización, puede usar el buscador de GeoLocation de código abierto como nekudo, freegeoip.

por ejemplo


Las otras respuestas son geniales pero, dado que la humanidad parece estar convencida de que “cualquier rastreo es rastreo maligno”, me gusta ir un paso más allá siendo “invisible” para el usuario reteniendo el .png/.jpg/.gif etc extensión de archivo de imagen.

No estoy seguro de la compatibilidad con todos los tipos de servidores web y hosts, pero para mí fue un cambio rápido a la directiva AddHandler que ya tenía en .htaccess, tal como:

AddHandler application/x-httpd-lsphp .png 

… para permitir el procesamiento de código PHP dentro de archivos con un .png extensión.

Puede que ya tengas un AddHandler línea para permitir PHP en .htm/.html archivos; si es así, simplemente agregue la extensión de archivo de imagen apropiada al final de la lista.

Este es, aproximadamente, mi código de “imagen de seguimiento”, archivo guardado como trackimage.png o lo que sea :

'')&&(strpos($json,"error")===false)) extract(json_decode($json ,true)); 
  $country=tidy($country);
  $prov=tidy($region);
  $city=tidy($city);
  list($lat,$lon)=explode(',',$loc);
  $lat=tidy($lat);
  $lon=tidy($lon);

  $sql = "INSERT INTO img_track_table set ip='$ip', useragent=$useragent, uri=$uri, " 
    ."querystring=$querystring, country=$country, prov=$prov, city=$city, lat=$lat, lon=$lon;";

  require 'connect.php'; $conn=new mysqli($servername, $username, $password, $dbname);
  if ($conn->connect_error)  /* couldn't connect, but do nothing about it */  
  }else  //run insert query
    if(!$conn->query($sql))  /* query error, but do nothing about it */ 
    $conn->close();
  

  //return image
  header("Content-Type: image/png"); 
  readfile("myActualImageFile.png");

  function tidy($str) //remove quotes and backslashes from string
    if(is_null($str)

Tenga en cuenta que si el código antes de la imagen devuelve un texto de error, o cualquier otra cosa, la imagen no se podrá visualizar. También podría valer la pena investigar posibles problemas de seguridad con esto que podrían aplicarse a su caso. Por ejemplo, esto.

Te mostramos las comentarios y valoraciones de los lectores

Si estás contento con lo expuesto, tienes la opción de dejar un enunciado acerca de qué te ha gustado de este escrito.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *