// Para nuevas versiones visita: // http://www.jveweb.net/archivo/2011/07/.html // Esta es una forma de contacto simple que envia un correo // Usa una captcha para prevenir que robots la llenen y // envien spam a tu dirección de correo // Tambien usa expresiones regulares para filtrar el nombre y el correo // Y pasa el mensaje por una o varias listas negras de palabras require_once('recaptchalib.php'); // Estas son las variables relevantes para que funcione el script // Estas dos variables son las llaves dadas cuando registras un sitio en recaptcha.net $publickey = "6LfCWsYSAAAAAF04PIqesmtojFGrmxhMt_2iA33y"; $privatekey = "6LfCWsYSAAAAANcViITiTPqSeP1etRMSAwKPs4LT"; // La dirección a donde enviamos el correo $para = 'contacto@jveweb.net'; // El asunto del correo $asunto = 'Un mensaje de tu forma de contacto'; // El correo desde el que viene, esto puede ser un noreply@algo $de = 'noreply@jveweb.net'; // Si esto es True, el correo dado por la persona es unado en el encabezado // Reply-To de el correo, permitiendonos hacer click en responder en nuestro // cliente de correo. Cambialo a False si quieres que esto no suceda. La // la dirección de correo está incluida en el cuerpo del mensaje. $responder_a_quien_envio = True; // False // Finalmente, un arreglo de archivos de lista negra. Solo estoy usando una // lista negra con todas las palabras mezcladas, pero puedo ver el uso para // tener separadas como una para spam, una para insultos en inglés, una // para insultos en español, etc. // Probablemente compilaré estas listas, así que revisa el artículo por // actualizaciones $listas_negras = array( // "spam.txt", // "english.txt", // "spanish.txt", "98733487.txt"); // Antes de procesar los contenidos del mensaje, valida el captcha if (isset($_POST["recaptcha_challenge_field"]) && isset($_POST["recaptcha_response_field"])) { $resp = recaptcha_check_answer ($privatekey, $_SERVER["REMOTE_ADDR"], $_POST["recaptcha_challenge_field"], $_POST["recaptcha_response_field"]); if (!$resp->is_valid) { // Si el Captcha es incorrecto, muestra un mensaje de error $mensaje_resultante = "El reCaptcha no fue incresado correctamente, regresa e intenta de nuevo." . "(reCAPTCHA dijo: " . $resp->error . ")"; } else { // El is Captcha es correcto, verifica que todos los campos fueran llenados if ($_POST["nombre"]!="" && $_POST["correo"]!="" && $_POST["contenido"]!="") { // Quita las etiquetas html, no las queremos $tmp_nombre = substr($_POST["nombre"],0,100); $tmp_correo = substr($_POST["correo"],0,100); $tmp_contenido = substr($_POST["contenido"],0,10000); // Revisa la validez de el nombre con una expresión regular if (!preg_match('/^[a-zA-ZÀ-ÖØ-öø-ÿ]+\.?((( |\-)[a-zA-ZÀ-ÖØ-öø-ÿ]+\.?)|([A-Z]\.?))*$/',$tmp_nombre)) { $mensaje_resultante = "El nombre es inválido"; } // Revisa la validez de el correo con una expresión regular // Esta expresión regular en particular probablemente necesita ser // actualizada gracias a ICANN y todos los nuevos tlds posibles, // pero debe funcionar bien en este punto temporal // Revisa el artículo por actualizaciones if (!preg_match("/^[a-z0-9_\-]+(\.[_a-z0-9\-]+)*@([_a-z0-9\-]+\.)+([a-z]{2}|aero|arpa|biz|com|coop|edu|gov|info|int|jobs|mil|museum|nombre|nato|net|org|pro|travel)$/", $tmp_correo)) { $mensaje_resultante = "La dirección de correo es inválida"; } // Compara el mensaje original contra una lista de palabras no deseadas // Solo el contenido de el mensaje es filtrado utilizando listas negras // Después de pasar el contenido original a travez de la(s) lista(s) negra(s), // si el mensaje resultante difiere de el original, entonces palabras de // la(s) lista(s) negra(s) fueron encontradas en el mensaje y por lo // tanto no lo enviamos // Pero primero, convertimos el contenido a minúsculas y cambiamos algunos // caracteres especiales en español para un mejor filtrado de palabras $referencia = strtolower($tmp_contenido); $caracteres_especiales = array('/á/','/é/','/í/','/ó/','/ú/','/ü/','/Á/','/É/','/Í/','/Ó/','/Ú/'); $caracteres_simples = array('a','e','i','o','u','u','A','E','I','O','U'); $referencia = preg_replace($caracteres_especiales,$caracteres_simples,$referencia); // Ahora, copiamos la referencia y la pasamos a travez de los filtros $contenido_filtrado = $referencia; foreach ($listas_negras as $archivo) { $lista_negra = file($archivo, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); $lista_negra = preg_replace('/(.*)/','/$1',$lista_negra); $contenido_filtrado = preg_replace($lista_negra,'',$contenido_filtrado); } // Revisamos si las palabras fueron encontradas en la lista negra if ($referencia != $contenido_filtrado) { $mensaje_resultante = "El mensaje no fue aceptado, algo esta en la lista negra de palabras"; } // Si algo salió mal, la variable $mensaje_resultante existirá en este punto // Si no, entonces envia el correo, de otra manera ignora esta parte if (!isset($mensaje_resultante)) { // Definimos los encabezados que queremos. Son separados con \r\n $headers = "MIME-Version: 1.0\r\n"; $headers .= "Content-Type: text/plain; charset=utf-8\r\n"; $headers .= "From: $de\r\n"; if ($responder_a_quien_envio) { $headers .= "Reply-To: $tmp_correo"; } else { $headers .= "Reply-To: $de"; } // Crear el mensaje $body = << Contacto - Sitio web de Juan Valencia

Contacto

Esta la manera usual, un correo a contacto en jveweb punto net (Publicaré mi llave PGP en el futuro cercano, por si acaso).

Estos días estoy probando Google+, Aquí está mi perfil.

Y por supuesto, aquí esta una forma de contacto. Permite un máximo de 10000 letras. Si tu mensaje es más largo que esto, puedes enviarme un correo.

Forma de contacto

Comentarios/Errores/Correcciones/Criticismo/Una historia

Acerca de Juan Valencia Escalante

Un programador con interés en código libre, cultura libre, privacidad y terminar con el hambre en el mundo.

Mis areas de experiencia son:

PHP, HTML (XHTML, HTML 5), CSS, Javascript, C/C++, Python, MySQL, PostgreeSQL, scripts para la linea de comandos, scripts para ViM, administración de Linux, licencias de código libre.

Mis areas de interes incluyen (no tengo tanta experiencia, aún):

Java, LaTeX, Lisp, The Gimp, Inkscape, física, dibujo, macrofotografía, guitarra.

Habilidades obsoletas o que ya no me interesan pero que aún puedo realizar:

Visual Basic, ActionScript.

Otras detalles sobre mi:

  • Utilizo Dvorak (un acomodo de teclas alternativo a qwerty).
  • Utilizo ViM
  • Utilizo KDE y Fluxbox
  • Tengo Slackware o Kubuntu en mis sistemas
  • Instalo Linux gratis a quien quiera probarlo (aunque acepto donaciones y esto está condicionado a que tenga tiempo libre)
  • He: compilado kernels, instalado sistemas con encriptación completa de disco (en netbooks, con slackware), configurado una computadora portatil como sistema multi-asiento, hecho SlackBuilds, respaldado discos duros enteros por cables de red, instalado hospedaje virtual remotamente, instalado sistemas utilizando NFS como fuente, y hecho circuitos y software para controlar objetos físicos con la computadora, por supuesto he programado sistemas, y muchas otras cosas.

Mi configuración multi-asiento, no vale la pena hacer esto con versiones recientes de Ubuntu, evidentemente es posible, pero debido a cambios que han implementado es más complicado de hacer.
Dos fotografías unidas mostrando una computadora portatil convertida en un sistema multi-asiento, la mitad derecha mustra el frente, la mitad izquierda muestra la parte de atras.

Para preguntas, comentarios, correcciones, crítica o solo dejarme una nota por favor envíame un correo a contacto@jveweb.net

Y si, este no es el diseño definitivo que quiero para mi sitio web, pero al comenzar o hacía mi propio diseño, o comenzaba a publicar contenido, el tiempo es limitado.