PHP

Conferma di recapito delle email con le librerie GD

Vi siete chiesti come mai le immagini nelle email possono essere pericolose? Non è improbabile che alcune di esse servano a confermare ad un mittente malizioso che il vostro indirizzo esiste realmente per renderlo vittima di SPAM.

Naturalmente la mia intenzione non è certo indurvi ad andare a caccia di indirizzi email validi, bensì illustrare in modo semplice come si può ottenere la conferma che una email è stata vista dal destinatario e far capire perchè nei programmi per la gestione della posta elettronica è meglio non abilitare con leggerezza la visualizzazione delle immagini.

Prima di tutto accertatevi con phpinfo() di avere le librerie GD installate. Tramite queste librerie di php si possono creare delle immagini al volo con un semplice script.

Infatti nell'email in formato html non inserite una vera immagine, ma richiamate un file php in questo modo:

HTML:
  1. <img src="http://www.tuodominio.ext/img.php" />

il tag img punta al file contenente lo script che genera l'immagine, per questo esempio sarà in formato jpg di 1 pixel bianco.

Lo script oltre che a produrre l'immagine può fare anche altre cose, come inserire nel file 'elenco_email.txt' l'indirizzo email che passeremo tramite GET con una piccola modifica al tag img precedente:

HTML:
  1. <img src="http://www.tuodominio.ext/img.php?email=account@host.ext" />

logicamente www.tuodominio.ext e account@host.ext sono utilizzati come esempio e vanno sostituiti rispettivamente con l'indirizzo http dove è posizionato il file img.php e l'indirizzo email che si desidera validare.

Nella stessa directory dove è posizionato il file img.php create il file elenco_email.txt con i permessi chmod settati a 777.

ecco il file img.php:

PHP:
  1. # apre il file di testo
  2. $fp = fopen("elenco_email.txt","a");
  3. if ($fp) {
  4.  
  5. # inserisce data e orario del collegamento
  6. $data_orario = "\r\n".date("d.m.Y - H:i:s") ;
  7. fwrite($fp,$data_orario) ;
  8.  
  9. # inserisce nel file di testo l'indirizzo email passato tramite GET
  10. if ( isset($_GET['email']) ) {
  11. $email = " - ".$_GET['email'] ;
  12. fwrite($fp,$email) ;
  13. }
  14.  
  15. # chiude il file
  16. fclose($fp) ;
  17. }
  18.  
  19. # istanzia un'immagine di un pixel
  20. $img = imageCreate(1,1);
  21.  
  22. # gli assegna il colore bianco
  23. $back = imagecolorallocate($img,255,255,255);
  24.  
  25. # imposta gli header
  26. header("Content-type: image/jpeg");
  27.  
  28. # invia l'output come immagine jpeg
  29. imagejpeg($img);
  30.  
  31. # libera la memoria
  32. imagedestroy($img);

Così quando il destinatario apre l'email e l'immagine viene visualizzata il suo indirizzo viene aggiunto al file 'elenco_email.txt'.
Lo script estremamente banale produce un elenco di indirizzi email validi con data e orario di visualizzazione.

Se fate delle prove inviando l'email con un client osservate che quando l'immagine viene visualizzata durante la scrittura, già lo script inserisce l'indirizzo nel file di testo. Quindi attenti a non confondervi.

VARIANTI

Invece che un'immagine di un pixel bianco possiamo, con le funzioni GD, creare immagini più sofisticate oppure caricare un'immagine creata precedentemente.

Potrebbe anche essere utile controllare con le espressioni regolari la validità dell'indirizzo email ricevuto in modo da evitare eventuali falsi positivi.

Piuttosto che utilizzare un file di testo gli indirizzi potrebbero essere inseriti direttamente in un database.

CONSIDERAZIONI

Se vi è venuta l'acquolina in bocca pensando che potrebbe essere una soluzione per validare la ricezione delle email inviate con la funzione php() scordatevelo.
Ormai tutti i software per la gestione della posta elettronica disabilitano di default la visualizzazione delle immagini rendendo questo uso inaffidabile.
Anche le prove per far funzionare lo script sono state ardue a causa degli antivirus.

Con un po' di fantasia si possono trovare altri usi per questo script, come ad esempio implementare un semplice sistema di statistiche, passando via GET il nome della pagina in cui è stata inserita l'immagine ed eventuali informazioni sul visitatore.

Tags: , , , , , , , ,

Ultimi 5 articoli di carletto

1 Comment

speak up

Add your comment below, or trackback from your own site.

Subscribe to these comments.

Be nice. Keep it clean. Stay on topic. No spam.

You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

*Required Fields