2011-03-27 16 views
17

Ho visto il servizio come spypig.com posizionare una piccola immagine nell'e-mail e tracciare quando è aperta e da dove. Tracciano la città, il paese, l'indirizzo IP ecc. Come è fatto?Tracciamento della posta elettronica con PHP e immagine

  1. Come si fa a sapere quando viene aperta la posta? E come viene generata l'immagine ?
  2. Come viene rilevato l'indirizzo IP e come è possibile conoscere la posizione da ?
+3

E che cosa si vuole fare con questo? Molti client di posta elettronica controllano comunque questo webbug e non li visualizzeranno, quindi non puoi fare affidamento su questo in un'applicazione seria. – martinstoeckli

risposta

46

In sostanza, nel corpo HTML del vostro e-mail, ci sarà un <img> tag che sarebbe simile a questa:

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

quando qualcuno legge la sua posta, con le immagini abilitate, l'email-client invierà una richiesta a tracker.php, per caricare l'immagine, passandole come parametro id=123456.


Questo script tracker.php sarà sul server, e, quando viene chiamato, lo farà:

  • Controllare il parametro id,
  • usarlo per trovare a quale indirizzo e-mail corrisponde - quando generando l'e-mail per ciascuno dei tuoi abbonati, avrai generato uno id diverso per ogni e-mail.
  • fare alcune cose - come log "e-mail 123456 è stato aperto", e alcune informazioni aggiuntive
  • restituire il contenuto di una piccola immagine; come una gif trasparente 1x1.


Lo script tracker.php sa da quale indirizzo IP è stato chiamato - come qualsiasi altro script PHP:

$ipAddress = $_SERVER['REMOTE_ADDR']; 

E, a partire da questo indirizzo IP, è possibile utilizzare un servizio di geolocalizzazione per trovare fuori da dove nel mondo l'e-mail è stata aperta.
Come un paio di esempi, si potrebbe dare un'occhiata a MaxMind, o IPInfoDB

Come lei sa che id=123456 corrisponde ad un'indirizzo email specifico, questo permette di scoprire dove ognuno dei vostri abbonati sono.

+0

Forse non ho capito completamente. Volevo solo capire perché abbiamo bisogno di restituire il contenuto di una piccola immagine. Cosa succederebbe se ci fosse questo ''? Cioè, impostato su 'display: none'. Potresti per favore gettare un po 'di luce su questo? – Gnanam

+0

Immagino che tu possa saltare la restituzione di un'immagine, ma sarà brutta mostrando l'icona dell'immagine spezzata. E non ti raccomando di usare display: nessuno su una e-mail, visto che i filtri antispam sono piuttosto rigidi al giorno d'oggi e l'uso di questo potrebbe far andare immediatamente la tua email nella cartella spam o magari anche rifiutarla, perché il filtro penserà che tu sia nascondere il testo o il codice dannoso. Anche l'utilizzo di testo bianco su sfondo bianco potrebbe attivare questa azione – aleation

+1

come restituire l'immagine da 'tracker.php'? –

2

Circa la prima parte della domanda, quello che ho fatto è stato restituire l'immagine da un file php. Oltre a restituire un'immagine (può essere 1x1 pixel trasparente png) è possibile registrare tutte le informazioni nel database. In questo modo, quando viene chiamato il file php, sai che l'immagine è stata caricata, cioè l'e-mail è stata letta. Il problema è che molti client moderni non caricano automaticamente le immagini. Questo per non permettere solo il tipo di cosa che stai cercando di fare, per motivi di privacy.

Sulla seconda parte, ci sono diversi servizi di geolocalizzazione Web, dove si invia un IP e si ottiene la geolocalizzazione. Puoi farlo nel file php che restituisce l'immagine pixel 1x1. Ecco una buona discussione su questo in questo sito: Geolocation web service recommendations

0

ero alla ricerca di una punta di nascondere l'immagine, il modo più semplice sembra fare:

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

per completare la spiegazione brillante di Pascal.

3

1. Posizionare l'iamge inseguitore in e-mail

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

Il suo funzionamento è molto semplice, una volta aperta la posta, l'immagine inseguitore Richiesta a tracker.php per un'immagine per il download, Noi ottenere i dati dell'URL del modulo dati utente e considerare come viene letto.

Nota: non utilizzare display: nessuno; proprietà per nascondere le tue immagini, può filtrare in base all'algoritmo di spam. E non luogo eventuali codici Javasript, ma anche bloccare filtrare lo spam

2. Sulla tracker.php

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

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

3. L'indirizzo IP è ottenere dalla seguente funzione.

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. Località:

La posizione è ottenere da parte dei servizi di geo-localizzazione, è possibile utilizzare open-source GeoLocation finder come nekudo, freegeoip.

per 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

Forse ho sbagliato, ma la parte ipecho dovrebbe essere chiamata sul server, quindi si otterrebbe solo l'indirizzo IP del server? – andeersg

Problemi correlati