Utilizar Akismet con PHP

Akismet el servicio para reportar y verificar si un mensaje es considerado como Spam nació originalmente para ser utilizado con WordPress pero hoy en día esta disponible para la mayoría de CMS y para diversos lenguajes de programación. Veremos en esta ocasión el uso de Akismet para prevenir el Spam en nuestros formulario de contacto.

Obteniendo la Clase
Para utilizar Akismet en PHP es necesario utilizar una clase que nos permita utilizar el API directamente, para ello se ha escrito php4 akismet class, descargamos la ultima versión donde encontramos el archivo akismet.class.php.

Creando el Formulario
Lo primero para nuestro ejemplo es la creación de nuestro formulario contáctenos, en donde incluiremos los campos necesarios.

<form id="contact" method="post">
<label for="name">Nombre</label>
<input name="name" type="text" id="name" />
<label for="mail">Email</label>
<input name="mail" type="text" id="mail" />
<label for="web">Web</label>
<input name="web" type="text" id="web" />
<label for="body">Mensaje</label>
<textarea name="body" id="body"></textarea>
<label for="btsend">&nbsp;</label>
<input type="submit" id="btsend" name="btsend" value="Enviar" />
</form>

Verificando los datos con Akismet
Para verificar los datos primero incluimos el archivo akismet.class.php el cual contiene los métodos necesarios para el uso de Akismet, lo siguiente es crear un array que contenga los datos del author, email, website y body, estos datos los obtenemos de nuestro formulario para luego procesarlo utilizando la clase Akismet.

include("akismet.class.php");
if (isset($_POST['btsend'])) {
	$domain = 'http://tudominio.com/';
	$apikey = 'TU_API_KEY';
	$data = array(
					'author'    => $_POST['name'],
					'email'     => $_POST['mail'],
					'website'   => $_POST['web'],
					'body'      => $_POST['body']
					);
	$akismet = new Akismet($domain, $apikey, $data);
    if($akismet->isSpam()) {
		echo "Spam detectado";
	} else {
		echo "Mensaje valido";
	}
}

Donde $domain contiene el nombre de tu dominio y $apikey contiene tu código de Akismet necesario para el uso de este servicio. En este caso solamente hemos mostrado si el mensaje es considerado como Spam o no.

Haciendo una breve modificación, en el caso que el mensaje no sea considerado como Spam procedemos a hacer el envío de correo (Para leer acerca del envío de correo con PHP pueden leer Envíar E-mail con PHP o Introducción a PHPMailer) con lo cual nuestro código sería de la forma:

include("akismet.class.php");
include("class.phpmailer.php");

if (isset($_POST['btsend'])) {
	$domain = 'http://tudominio.com/';
	$apikey = 'TU_API_KEY';
	$data = array(
					'author'    => $_POST['name'],
					'email'     => $_POST['mail'],
					'website'   => $_POST['web'],
					'body'      => $_POST['body']
					);
	$akismet = new Akismet($domain, $apikey, $data);
    if (!$akismet->isSpam()) {
		// Enviamos el Email
		$mail = new PHPMailer();
		$mail->Host = "localhost";
		$mail->From = $_POST['mail'];
		$mail->FromName = $_POST['name'];
		$mail->Subject = "Contacto";
		$mail->Body = $_POST['body'];
		$mail->AddAddress("tucorreo@email.com");
		$mail->Send();
	}
}

Con esto tendremos una nueva alternativa para evitar el envío de Spam mediante los formulario de contacto o integrarlo directamente el cualquier aplicación web que deseamos proteger.

[download id=»4″ autop=»false»]

Nota
Para facilitar la explicación y lectura del código hemos obviado el proceso de validación del formulario, este proceso debe implementarse para evitar ataques no deseados.

Comentarios Total 7 comentarios

Matias
Publicado: 09/12/2008 10:07 am

EXELETE, como siempre los mejores aportes a la comunidad de programadores los ahce unijimpe, saludos!

Lord Cold
Publicado: 18/12/2008 4:07 pm

Buen post, al parecer casi siempre publicas para wordpress, me pregunto si tendras algo para blogger. Saludos.

caos30
Publicado: 20/01/2009 2:56 pm

Estoy de acuerdo con ellos… eres un crack redactando guías de programación ;) Sigo tu blog desde hace un año aprox.

Quería preguntar si alguien ha utilizado ya Akismet durante un tiempo y si podríais compartir vuestra opinión sobre su efectividad. Es que ciertamente, siento un poco de recelo en permitir «que un tercero decida lo que es spam». Especialmente miedo me dan los «falsos positivos». Es decir, ¿y si considera spam algo que no lo es?

¿Alguien puede responderme desde su experiencia, cómo le ha ido? Gracias de antemano.

SERGI

The-MigueX
Publicado: 03/06/2009 2:36 pm

Olas Bueno gracias

eres lo maximo

pero tengo una duda
cual es mi key?

como lo averiguo

Juan Carlos Rendon
Publicado: 04/06/2009 11:07 am

hola, trate de añadir esta funcion a una aplicacion propia pero al final me manda un error del servidor, alparecer no se estan haciendo bien las cosas o no se que pasa…

de cualquier manera gracias por el aporte.

kechu7
Publicado: 08/07/2009 11:41 pm

http://akismet.com/personal/
es esta pagina dice como…

tienes que registrarte en wordPress para que te la den…

pero ps no supe usarlo xD

se bueno…

Manuel
Publicado: 27/08/2010 7:45 pm

como hago para incluir una lista de ip y palabras a bloquear ?

 

Comentar

En este blog los comentarios están moderados, serán mostrados cuando el administrador los apruebe. Por favor, evita comentarios ofensivos u obscenos por que no serán aprobados.
Si deseas publicar código fuente debes hacerlo entre las etiquedas <code> y </code>, además debes reemplazar los carácteres < por &lt; y > por &gt;.

(Requerido)

(Requerido, no será publicado)

(Requerido)

(Tags aceptados: <a> <em> <strong> <code> <ul> <li>)