Metodo 0. Il mondo perfetto

In un mondo perfetto sarebbe sufficiente:

<a href="mailto:user@domain.tld">user@domain.tld</a>

Si legge, attiva il mailto, si stampa e gode della massima portabilità. Purtroppo questo mondo non è perfetto :-( e questo metodo è praticamente inutilizzabile.

Metodo 1. Salvare la mail in una immagine

Un metodo popolare prevede di salvare l'indirizzo all'interno di una immagine. In questo modo, non essendoci testo, i crawler degli spammer non possono cercare nulla. Di fatto, però, questo metodo comporta del lavoro in più per creare l'immagine. Riassumendo:

  • Video: sì.
  • Stampa: solo se la stampa immagini è abilitata.
  • Mailto: no. L'utente è costretto a copiare manualmente l'indirizzo.
  • Compatibilità: ampia, ma difficile integrare lo stile.
  • Efficacia: elevata.
  • Usabilità: molto scarsa.

Metodo 2. Nascondere @ e .

Nascondere gli elementi essenziali della mail protegge dai crawler più diffusi; in alcuni ambiti poi, come la pubblicazione di file di testo è anche l'unica soluzione.

user[AT]domain[DOT]tld

In HTML si può optare per una versione leggermente più efficiente, che mostra a video l'indirizzo avvalendosi delle entità. Alcuni crawler convertono le entità in ASCII prima del parsing: in questo caso la soluzione è inutile.

user& #64;domain& #46;tld
  • Video: sì.
  • Stampa: sì.
  • Mailto: solo nel secondo caso.
  • Compatibilità: molto ampia.
  • Efficacia: media.
  • Usabilità: discreta (diffusione), buona nel secondo caso.

Metodo 3. Sostituire tutti i caratteri con le entità HTML

Figlia del metodo 2, questa soluzione converte l'intero indirizzo in entità avvalendosi di una semplice funzione PHP.

function ord_mail($email){
	$o = Array();
	foreach(str_split(trim($email)) as $v){
		$o[] = "& #".ord($v).";";
	} return implode('',$o);
}
echo ord_mail("user@domain.tld");

Ecco il risultato:

& #117;& #115;& #101;& #114;& #64;& #100;& #111;& #109;& #97;& #105;& #110;& #46;& #116;& #108;& #100;
  • Video: sì.
  • Stampa: sì.
  • Mailto: sì.
  • Compatibilità: molto ampia.
  • Efficacia: buona.
  • Usabilità: ottima.

Metodo 4. Offuscare con Javascript

Javascript è un ottimo strumento per manipolare il testo HTML, le soluzioni qui sotto offrono l'immediatezza e l'usabilità del testo in chiaro (metodo 0), elevata efficacia, ma richiedono Javascript attivo.

Questa funzione JS suddivide la stringa in varie parti e poi la assemblarla:

function split_mail(user, domain, tld) {
    var mail;
    mail += '<a href="' + 'ma' + 'il' + 'to:' + user;
    mail += '& #64;' + domain '.' + tld;
    mail += '">' user + '& #64;' + domain '.' + tld + '<' + '/a>';
    document.write(mail);
}
split_mail('user','domain','tld');

Quest'altra invece, che è la mia preferita, usa l'indirizzo codificato in base64 (al codifica può avvenire lato server con PHP) e poi lo decodifica con un semplice classe al momento dell'uso:

var mail = Base64.decode("dXNlckBkb21haW4udGxkCg==");
document.write("<a href=\"mailto:"+mail+"\" class=\"mail\">"+mail+"</a>");
  • Video: sì.
  • Stampa: sì.
  • Mailto: sì.
  • Compatibilità: richiede Javascript, può eventualmente essere utilizzato il tag <noscript> con il metodo 2.
  • Efficacia: elevata.
  • Usabilità: ottima.

Metodo 5. Invertire la stringa con CSS

Questo è un metodo curioso: in pratica si scrive la mail al contrario e poi la si "raddrizza" per gli utenti via CSS:

<span style="unicode-bidi:bidi-override;direction:rtl;">dlt.niamod@resu</span>
  • Video: sì.
  • Stampa: sì.
  • Mailto: no.
  • Compatibilità: richiede CSS anche per la stampa.
  • Efficacia: elevata.
  • Usabilità: scarsa.

Metodo 6. Inserire dei commenti HTML nell'indirizzo

Può essere un metodo rapido alternativo alla prima soluzione del metodo 2:

user<!--nospam-->@domain<!--nospam-->.tld>
  • Video: sì.
  • Stampa: sì.
  • Mailto: No.
  • Compatibilità: Molto ampia.
  • Efficacia: discreta.
  • Usabilità: discreta.

Conclusioni

Come al solito, l'approccio "ci sono molti modi per farlo" ci lascia senza una soluzione definitiva, ma con un ventaglio di possibilità equivalenti da adattare al contesto in cui ci si trova, alle tecnologie impiegate e al gusto personale.

Voi quale preferite? E quale utilizzate?

17 CommentiDi' la tua

Il tuo indirizzo email non sarà mostrato pubblicamente. I campi obbligatori sono contrassegnati da *

tt-reset_preferences

derti
derti

Aggiungo... per chi usa Wordpress, la possibilità  di riachimare (ad es. nei template) la funzione: echo antispambot("latuapreziosamail@dominio.it");

Alt Design Blog
Alt Design Blog

metodo 6: spartano, elegante, creativo!

ilNek
ilNek

Io uso da tempo il metodo 3 e non ho mai avuto problemi di spam, ovviamente prima o poi arriverà . L'uso di un'immagine come fa FB non ha senso, é ad accessibilità  zero, ma FB in questo é maestro :-D e inoltre non ripara dallo spam dato che agli spammer basterebbe introdurre gli stessi metodi di lettura delle immagini che suano per saltare i captcha. Personalmente associo sempre un form dopo l'indirizzo email, dato che non sempre chi guarda il sito possiede al momento un programma di posta. Basta pensare a chi si connette dalle biblioteche o dagli internet point, se sono fubi (pochi però) non usano il programma di posta trovato in loco. Sulla questione dati sensibili @Gabriele, é proprio nella definizione di dato sensibile che trovi la scappatoia, se uno lo vuole rendere pubblico é una sua libera scelta e basta che firmi a te sviluppatore una liberatoria e poi dormi tranquillo. Certo gli può capitare spam, ma é una sua libera scelta; se sei sul Web e ci vuoi lavorare non puoi trascendere da un indirizzo email, ti serve come il telefono :-) M.

Marco Grazia
Marco Grazia

Il codice del metodo 3 e 4 contengono un piccolo errore (voluto), i caratteri "& #" devono essere scritti senza lo spazio, introdotto appositamente per un limite della piattaforma. Ciao!

Andrea Ganduglia
Andrea Ganduglia

Ottimi suggerimenti! Grazie! ma... Ho provato il metodo 3. Viene indicata la compatibilità  con "mailto:". Ho provato, apre un nuovo messaggio di posta (outlook), ma non trascrive l'indirizzo email. Ometto qualcosa???

Cristiano
Cristiano

io uso questo semplice widget online che genera una praticissima stringa in js. Metto l'email nel source , clicco translate ed é pronto http://www.javascriptwriter.com/

simone
simone

Finalmente un gran bel post! :-) In particolare mi incuriosisce il metodo dei CSS, molto curioso, veramente!

Cristiano
Cristiano

[...] Come nascondere un indirizzo e-mail agli spammer | Edit – Il blog di HTML.it (tags: php scripts javascript) [...]

links for 2010-02-23 » 4exp.net
links for 2010-02-23 » 4exp.net

Un'alternativa é utilizzare un indirizzo gmail o un alias che rimandi ad un indirizzo gmail. E' come il metodo 0, ma con un efficacia ottima/elevata :P

Fra_T
Fra_T