Archivo para la categoría PHP

October 30th, 2008 por Antonio Touriño
<script>document.writeln("Hello World!");</script>
  • Share/Bookmark
October 18th, 2008 por Jorge Yau

Hace un par de días decidí añadirle la opción de poder publicar anotaciones vía e-mail a una de las aplicaciones en las que estoy trabajando, una opción es tener un proceso automatizado que revise una cuenta de correo cada cierta cantidad de tiempo y luego procesar cualquier correo entrante, la desventaja de esto, es que le estas añadiendo procesos innecesarios a tu servidor, ya que para que funcione en tiempo real, debes revisar la cuenta en un corto intervalo de tiempo, el cual utiliza recursos de tu servidor haya o no mensajes nuevos, hay otras formas, mas complejas que requieren mucha configuración y acceso directo a un servidor SMTP, pero esto no es lo que estaba buscando, lo que necesitaba era una forma rápida y sencilla de procesar correos entrantes de múltiples direcciones de correo, sin sobrecargar mi servidor.

Decidí buscar una alternativa hospedada fuera de mi servidor y que fuera fácil de utilizar sin un alto costo, encontré dos opciones Mailhook.org ($14/año) y smtp2web (gratis), el concepto de ambos, es que se encargan de recibir tu correo, y al recibirlo es reenviado a tu aplicación en forma de POST, este POST incluye todo el mensaje incluyendo ‘headers’ y archivos adjuntos, para ser procesados en tu aplicación de la forma que te plazca. De esta forma tu servidor solo entra en acción cuando un e-mail es recibido.

La decisión no fue muy difícil viendo que ambos servicios son similares, decidí darle una oportunidad a la versión gratuita (smtp2web), además de ser gratuita, el código de la misma aplicación está disponible como código libre. A continuación una breve guia de como utilizar este servicio.

El proceso es sencillo, solo necesitas una cuenta de Google para utilizar el servicio.

Tienes dos opciones, utilizar tu propio dominio o una sola cuenta con el dominio @smtp2web.com, para recibir e-mails con tu propio correo necesitas tener acceso a los ‘MX records’ de tu dominio. 

Para configurar tu dominio en smtp2web, haz click en ‘Add domain mapping’, donde te pedirán el nombre de tu dominio y la dirección en donde vas a recibir el post, el dominio de la dirección de POST debe coincidir con la dirección que utilizas para recibir dominios, por lo tanto debe ser algo como ‘http://post.tudominio.com/emailposting’.

Nota: Todo correo entrante a tudominio.com sera dirigido a smtp2web, si deseas seguir recibiendo correo normal con ese dominio, te recomiendo que utilices un subdominio algo como post.tudominio.com

Luego sigue los pasos para confirmar que el dominio que estas utilizando te pertenece, solo debes subir a tu servidor un archivo vacío con el nombre que smtp2web te va a proporcionar.

El siguiente paso es añadir lo siguiente a tus DNS records:

post.tudominio.com. MX 5 mx1.smtp2web.com.
post.tudominio.com. MX 5 mx2.smtp2web.com.

Si seguiste todos estos pasos correctamente, ya tu aplicación es capaz de recibir e-mails, cualquier e-mail enviado a usuario@post.tudominio.com será automáticamente enviado como un POST a la dirección http://post.tudominio.com/emailposting.

Aún no hemos terminado, tu aplicación necesita entender ese POST.

En PHP es sencillo, solo utiliza el siguiente código.

<?php
$from = htmlentities($_GET['from']);
$to = htmlentities($_GET['to']);
$body = $_POST['body']
/* tu código, insertar a la BD, etc. */
?>

En Ruby on Rails es un poco mas complicado, RoR por motivos de seguridad no permite hacer POST desde otro servidor/aplicación, así que debes añadir lo siguiente al inicio de tu ‘controller’ para pasar por alto esta medida de seguridad en un ‘action’, en este caso, ‘emailposting’.

protect_from_forgery :except => :emailposting

Para analizar esta data correctamente, te recomiendo que utilices una librería llamada TMail, con esta puedes sacar cualquier tipo de información del e-mail, incluyendo cualquier archivo adjunto que tenga.

$ gem install tmail

Luego debes crear un ‘action’ en tu ‘controller’

def emailposting
  mail = TMail::Mail.parse(request.raw_post.to_s)
  from = mail.from.to_s
  to = mail.to.to_s
  subject = mail.subject.to_s
  body = mail.body.to_s
  # tu código, insertar a la BD, etc.
end

El resto, es responsabilidad tuya, espero les haya gustado esta primera guía para Tequilog.

  • Share/Bookmark