Anti Spam en AJAX - Mails indétéctable par un BOT

Cette méthode est réalisée en implémentant ces notions :

Le code javascript à inclure : anti_spam.js ( requêtes Ajax ) :

// Fonction qui crée un objet XMLHttpRequest
function get_request_obj()
{

if (window.ActiveXObject) { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); }
else if (window.XMLHttpRequest) { xmlHttp = new XMLHttpRequest(); }

}

// Fonction qui demande le mail
function get_mail() {

var verify = "NO_BOT"; // On utilise le message NO_BOT pour monter mon identité au script php

get_request_obj();
xmlHttp.onreadystatechange = get_mail_reponse;

xmlHttp.open("POST", "http://mon.site.com/anti-spam/get_mail.php", true);
xmlHttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
xmlHttp.send("mail="+verify); // Je transmet verify par post au fichier

}

// Fonction traitant le message retourné
function get_mail_reponse() {

if(xmlHttp.readyState == 4){

if(xmlHttp.status == 200) {

resultat = xmlHttp.responseText;

if (resultat!=undefined) {

var url = resultat;
// J'ouvre le mail ou la page retournéeavec javascript
window.open(url);

} else {
// Echec de la requête
alert('Etes vous un bot? J\'arrive pas à vous donner mon mail, désolé!');

} } }

return false;

}

Le code php : get_mail.php ( vous pouvez bien sur utiliser votre langage pour implémenter ce résultat ) :

<?php

$message = "NO_BOT"; // Message attendu du JS
$mail = "mon@mail.com"; // Je cache mon mail dans cette variable
$page_de_contact = "http://page_de_contact.com/contact.php"; // Je met une page alternative au mail au cas où le message n'est pas le bon

// si la variable mail en post existe et contient le message
if ((!empty($_POST['mail']))&&($_POST['mail']==$message)) {
echo 'mailto:'.$mail; // J'envoie le mail au js
} else { // sinon
echo $page_de_contact; // J'envoie la page alternative au js
}

?>

Le code html :

// On parametre comme évènement notre fonction get_mail().
// Vous pouvez implémenter n'importe quel bloc xhtml a la place de span bien sùr.
<span onclick="get_mail(); return false;">
Contactez moi par mail
</span>

Exemple :

Cliquez ici pour avoir mon mail.

Conclusion et archive de la solution :

On peut bien sur voir toute sorte de dérive à cette solution et l'adapter à ses besoins, comme un bloc qui se change en textfield ou div ou span avec le mail rempli dedans dès le chargement

Je vous laisse l'archive du code à consommer sans modération :)

Archive ZIP :: Archive TAR