So che la mia risposta non piacerà a molti, ma ti preghiamo di considerare i punti delineati prima di sfogliare.
Qualsiasi cosa facilmente leggibile dalla macchina sarà facilmente leggibile dalla macchina dagli spammer. Anche se le loro azioni ci sembrano stupide, non sono persone stupide. Sono innovativi e intraprendenti. Non usano solo i robot per raccogliere le e-mail, hanno una miriade di metodi a loro disposizione e, oltre a ciò, pagano semplicemente buoni elenchi di nuove e-mail. Ciò significa che hanno ottenuto migliaia di hacker black-hat in tutto il mondo per eseguire il loro lavoro. Persone pronte a codificare malware che raschiano gli schermi dei browser di altre persone e che alla fine rendono inutilizzabile qualsiasi metodo tu stia cercando di ottenere. Questo thread è già stato letto da più di 10 persone e stanno ridendo di noi. Alcuni di loro potrebbero anche annoiarsi fino alle lacrime per scoprire che non possiamo affrontare una nuova sfida.
Tieni presente che alla fine non stai cercando di risparmiare tempo, ma il tempo degli altri. Per questo motivo, ti preghiamo di considerare di trascorrere del tempo extra qui. Non esiste un proiettile magico di facile esecuzione che funzioni. Se lavori in un'azienda che pubblica e-mail di 100 persone sul sito e puoi ridurre 1 e-mail di spam al giorno a persona, stiamo parlando di 36500 e-mail di spam all'anno. Se la cancellazione di tale e-mail richiede in media 5 secondi, stiamo parlando di 50 ore lavorative all'anno. Per non parlare della quantità ridotta di fastidio. Quindi, perché non dedicare qualche ora a questo?
Non sono solo tu e le persone a ricevere l'e-mail che considerano il tempo un bene. Pertanto, è necessario trovare un modo per offuscare gli indirizzi e-mail in modo tale che non paghi per decifrarlo. Se si utilizza un metodo ampiamente utilizzato per offuscare le e-mail, è davvero utile decifrarlo. Da allora, il cracker metterà le mani su migliaia, se non decine o centinaia di migliaia di nuove e-mail. E per loro, otterranno soldi.
Quindi, vai avanti e codifica il tuo metodo. Questo è un raro caso in cui reinventare la ruota paga davvero. Utilizzare un metodo che non è leggibile dalla macchina e che preferibilmente richiederà una certa interazione dell'utente senza sacrificare l'esperienza dell'utente.
Ho impiegato circa 20 minuti per codificare un esempio di ciò che intendo. Nell'esempio, ho usato KnockoutJS semplicemente perché mi piace e so che probabilmente non lo userai da solo. Ma è comunque irrilevante. È una soluzione personalizzata che non è ampiamente utilizzata. Craccarlo non rappresenterà una ricompensa per averlo fatto poiché il metodo per farlo funzionerebbe solo su una singola pagina nella vasta Internet.
Ecco il violino: http://jsfiddle.net/hzaw6/
Il codice seguente non vuole essere un esempio di buon codice. Ma solo un breve esempio di codice che è molto difficile da capire per la macchina, qui gestiamo persino le e-mail. E anche se potesse essere fatto, non pagherà per l'esecuzione su larga scala.
E sì, lo so che non funziona su IE = lte8 a causa di "Impossibile ottenere" attributi "di proprietà di riferimento indefinito o nullo" ma semplicemente non mi interessa perché è solo una demo del metodo, non un'implementazione effettiva, e non è destinato a essere utilizzato in produzione così com'è. Sentiti libero di codificare il tuo che è più fresco, tecnicamente più solido ecc.
Oh, e mai e poi mai nominare qualcosa di mail o e-mail in html o javascript. È semplicemente troppo facile scrappare il DOM e l'oggetto finestra per qualsiasi cosa di nome posta o e-mail e verificare se contiene qualcosa che corrisponde a un'e-mail. Questo è il motivo per cui non vuoi mai avere variabili che contengano e-mail nella sua forma completa e questo è anche il motivo per cui desideri che l'utente interagisca con la pagina prima di assegnare tali variabili. Se il modello a oggetti javascript contiene indirizzi di posta elettronica nello stato pronto per DOM, li stai esponendo agli spammer.
HTML:
<div data-bind="foreach: contacts">
<div class="contact">
<div>
<h5 data-bind="text: firstName + ' ' + lastName + ' / ' + department"></h5>
<ul>
<li>Phone: <span data-bind="text: phone"></span></li>
<li><a href="#999" data-bind="click:$root.reveal">E-mail</a> <span data-bind="visible: $root.msgMeToThis() != ''"><input class="merged" data-bind="value: mPrefix" readonly="readonly" /><span data-bind="text: '@' + domain"></span></span></li>
</ul>
</div>
</div>
</div>
Il JS
function ViewModel(){
var self = this;
self.contacts = ko.observableArray([
{ firstName:'John', mPrefix: 'john.doe', domain: 'domain.com', lastName: 'Doe', department: 'Sales', phone: '+358 12 345 6789' },
{ firstName:'Joe', mPrefix: 'joe.w', domain: 'wonder.com', lastName: 'Wonder', department: 'Time wasting', phone: '+358 98 765 4321' },
{ firstName:'Mike', mPrefix: 'yo', domain: 'rappin.com', lastName: 'Rophone', department: 'Audio', phone: '+358 11 222 3333' }
]);
self.msgMeToThis = ko.observable('');
self.reveal = function(m, e){
var name = e.target.attributes.href.value;
name = name.replace('#', '');
self.msgMeToThis(name);
};
}
var viewModel = new ViewModel();
ko.applyBindings(viewModel);