Friday, February 17, 2006

Desarrollo de un Cliente de Correo Electrónico Basado en Web – Parte 1

Introducción
Ok la intención de esta serie de artículos es la de crear un cliente de correo electrónico basado en Web muy al estilo de Hotmail, Yahoo, webmail, gmail, etc.

Si has vivido en una isla desierta los últimos 10 años entonces no sabes lo que es el correo electrónico, si este es tu caso adiós, sayonara, bye bye, zárpele a buscar un tutorial de correo electrónico porque en esta serie de cursos no vamos a hablar de lo que es el correo electrónico que es y como se come porque el único requisito que estoy asumiendo es que todos ustedes tengan alguna cuenta de correo electrónico, que ya hayan enviado correos a sus amigos, primos, novios, vecinos, esposas (suertudotes si tiene mas de una), al perro, al gato, a algún extraño ya de jodido.
Además de que tengan alguna noción de programación (digo va a estar carbón explicar los conceptos de un cliente de e-mail y además explicarles que es lo que hace un pinché if ).

Después de la pequeña introducción vamos a entrarle a lo bueno pero para que vean que no soy funda veamos que es un cliente de e-mail y cuales son sus características.
Un cliente de e-mail es un programa de computadora que se usa para leer y enviar e-mail (daaaaa), este tipo de programas pueden ser de tipo fat (gruesos) en donde toda la funcionalidad es implementada del lado del cliente o de tipo thin (delgado) o sea que corren en ambientes Web y por si aun no les cae el veinte o de plano no leyeron el titulo de los tutoriales vamos a implementar el segundo tipo de clientes o sea uno Web.

Cuando el usuario revisa su e-mail el cliente se conectan al servidor de correo electrónico (pe. Exchange Server) para obtener la lista de e-mails, esta comunicación se hace utilizando ya sea POP3 o IMAP4. Cuando el cliente manda in e-mal lo envía al servidor utilizando el protocolo SMTP, adema de esto el cliente necesita implementar un estándar llamado MIME para el envío/recepción de archivos binarios dentro del e-mail.

Esto se pone peliagudo ya tenemos cuatro acrónimos (POP3, IMAP4, SMTP y MIME) y antes de que tengamos mas y esto se convierta en un desmadre y en otro lenguaje diferenta al español y también para que no les de frió (porque hasta acá se escuchan rascándose la cabeza) vamos a explicar cada uno de los protocolos y estándares usados en el proceso de envío/recepción de e-mail.

POP3
Esto quiere decir Post Office Protocol versión 3 es un protocolo que se usa para obtener e-mail del servidor, este protocolo funciona sobre una conexión TCP. El diseño de este protocolo soporta conexiones intermitentes tales como las famosas dial-up (si esas conexionas a través de una línea telefónica que se caen cada ves que uno presiona la tecla enter). permitiéndole a los usuarios bajar a la PC todos los correos cuando están conectados y una vez echo esto el usuario los puede ver o modificar sin necesidad de estar conectados. Casi todos los subscriptores a servicio de e-mail ofrecido por un proveedor utilizan este protocolo para la obtención de los correos.

IMAP4
Pero como todo por servir se acaba y en este negocio siempre hay algún segundo hijo de dios se cree mejor que tu y se la pasa encontrándole defectos y buscando la manera de darle en la madre a lo que hiciste pues este protocolo se invento con el fin de cubrir las deficiencias del anterior
Básicamente este protocolo se utiliza para los mismos propósitos que POP3 si embargo provee las siguientes mejoras sobre POP3

Soporte para modos conectados y desconectados
Cuando se utiliza POP3 por lo regular el usuario se conecta por un periodo breve de tiempo, solo se conectan el tiempo necesario para bajar los nuevos correos a su PC. Con IMAP4 por lo regular el cliente esta conectado mientras el cliente de correo electrónico permanece activa, si el usuario tiene correos que ocupan mucho espacio la opción de conectarse con IMAP4 suena razonable, o sea que si su compa les mando la ultima película de la Nicole Kidman (quessssote!!!!) por e-mail pues el uso de IMAP4 es la opción a usar.

Soporte para múltiples usuarios conectados en la misma caja de entrada (inbox).
El protocolo POP3 asume que el usuario es el único que esta conectado a el inbox, mientras que IMAP permite acceso simultaneo por múltiples clientes y proporciona mecanismos para que los clientes detecten los cambios hechos en el inbox por otros clientes.

Soporte para acceso partes de MIME y lecturas parciales
IMAP4 permite la retribución de partes MIME por separado (si no sabes que es MIME no te apures abajo lo explico) y también la de obtener ya sea todo o parte del mensaje, esto es un cliente puede obtener solo el texto que forma el mensaje pero no los activos anexados, esto permite mostrar el mensaje donde tu compa sin la necesidad de bajar también la película ( de la Nicole Quesssssote, presta ).

Soporte de almacenamiento en el servidor del estado de los mensajes
Una de las dolencias de POP3 es que los benditos mensajes a guev… digo a fuerzas se bajaban del servidor al cliente, con IMAP4 los mensajes pueden se bajados o pueden seguir en el servidor, y se cuenta con algunos indicadores que muestran el estado del mensaje por ejemplo si el mensaje ha sido leido, borrado, o se le hizo reply, estas banderas son almacenadas en el servidor de modo que los clientes que accedan al inbox pueda ver el estado del mensaje.

Soporte de acceso a múltiples cajas de entrada
Con IMAP el usuario puede crear múltiples cajas de entrada representadas en el cliente como carpetas, si han usado Outlook saben a lo que me refiero, de esta manera el administrador puede crear carpetas publicas o compartidas, en los proyectos en donde se requiere de mucha colaboración esta podría ser una alternativa viable.

Soporte de búsquedas del lado del servidor.

El protocolo IMAP4 permite al cliente requerirle al servidor un búsqueda de mensajes de un inbox especifico con cierto criterio de búsqueda, esta es una opción muy buena ya que el cliente no requiere de bajar todos los mensajes a la PC para poder buscar mensajes.
Define un mecanismo bien definido de extensibilidad
Si este protocolo provee una especificación para poder extenderlo si es que la especificación provista por default no es suficiente. Algunas extensiones basadas en este protocolo han sido creadas y están siendo usadas pero en este tutorial no vamos a hablar de ellas porque no las he usado y francamente me da gueva investigar como funcionan. Además de que no las vamos a necesitar.

SMTP (Simple Mail Transfer Protocol)
SMTP es un protocolo basado en texto realmente simple, en este protocolo se pueden especificar uno o mas destinatarios (o sea a toda la raza a la que le vas a enviar el jodido mail) las ventajas de este protocolo son que se puede verificar la existencia de los destinatarios antes de mandar el mensaje.

MIME (Multipropouse Internet Mail Extension)
Este no es un protocolo sino un estándar el cual se usa para mandar por e-mail archivos binarios, saben porque se creo este estándar? ……………………………… no? ….. mta PUES porque para poder mandar un mensaje necesitamos usar SMTP y si leyeron que digo leyeron si entendieron bien la sección anterior SMTP es basado en texto asi que este estándar tubo que ser creado para enviar archivos binarios quien no le ha mandado una foto a su alguien, la foto del nuevo bebe o la foto de ustedes con su nuevo look o mínimo la foto de la Nicole Kidman (queso, masita!!!!!! ) a un compa. Y por si no lo sabían el formato texto y el binario son como yerno y suegra, o sea que no se llevan bien pero se medio soportan con mucho trabajo. saludos a mi suegra.
Bueno ya se que ya se cansaron de leer pero déjenme les comento como va a estar organizado el ambiente de desarrollo o se aca?.

  • La version que tengo instalada de PHP es la version 5
  • Para el desarrollo de los scripts de PHP voy a usar el IDE llamado PHP Designer 2006.
  • Para el desarrollo de las paginas HTML voy a usar también el PHP Designer 2006 lo mismo para Archivos CSS, XML o cualquier archivo de tags.
  • El Web Server voy a usar IIS 6.0

El servidor de correo electronico.
Tengo instalado en mi PC un servidor de e-mail voy a usar uno que me proporciona mi proveedor de hospedaje, aquí es donde ustedes tendrán que ver la manera de cómo obtener un servidor de correo electrónico, una posible opción sera la versión de evaluación de Exchange Server en esta liga podrán encontrar una lista de servidores de correo electrónico, en este tutorial no vamos a cubrir la instalación y configuración de un servidor de correo electrónico.

Otra opción para probar la aplicación seria si ustedes pueden obtener una cuenta la cual pueden acceder por medio de un cliente como Outlook o Eudora, entonces en lugar de configurar Outlook o Eudora configuran su cliente y con eso se arma..

La estructura del sitio web
La estructura de carpetas es la siguiente:























admin – Esta carpeta va acontener todas las paginas relacionadas con la administrador del clinte de correo electrónico, por ejemplo las pagina en donde se configuran la dirección del servidor de correo electrónico.

css – Esta carpeta contendrá las hojas de estilo del cliente.

imgs – Contendrá todas las imágenes del sitio.

include – Esta carpeta contendrá los Scripts de PHP para la conexión al servidor.

js – Contendrá todo el código de JavaScript.

panes – Contendrá todos los paneles de opción del sito. Para ser franco no se si lo use o no, esta es la estructura que uso en todos mi sitios Web.

Bueno ya me voy tengo mucho sueño y ya me duelen los dedos si dije bien DEDOS así que nos vemos la próxima semana. Que tengan buen fin de semana no pisteen mucho, no coman tierra y si toman no manejen

Adiós.

Wednesday, February 15, 2006

Programacion de un cliente de correo electronico basado en Web

Durante algún tiempo estuve pensando en que poner en este blog, no quería hablar de temas banales como nuevas versiones de PHP o de apache o cosas por el estilo, quería hacer algo un didáctico pero no sabia que ni como darle el formato. Mientras leía el blog de mi compa (amigo) Ari Kassin se me ocurrió utilizar un formato similar, solo que en lugar de tratar temas de Java mi enfoque seria el uso de tecnólogas de código abierto, durante un buen rato estuve madurando la idea y se me ocurrió iniciar una serie de cursos utilizando PHP.

En esta serie de cursos intento mostrar el desarrollo de aplicaciones interesantes utilizando dicho lenguaje así que me puse a pensar que aplicación seria lo suficiente mente interesante para iniciar mi serie de cursos, durante unos días estuve pensando que hacer hasta que hoy un amigo me pregunto si habla usado el sitio Web para revisar los correos electrónicos que la empresa en la que labor tiene para todos aquellos empleados que no tiene acceso a la intranet de la misma.

Esta aplicación Web no es más ni menos que Web Outlook un cliente basado en Web para revisar el correo electrónico de Exchange. Mientras platicábamos de lo padre que era tener ese tipo de aplicaciones algo en mi cerebro hizo clic (y no andaba crudo) y se me ocurrió la brillante idea (brillante?) de desarrollar un cliente similar en PHP, SI!! YA SE!! que en la Web existen un sinfín de dientes de este tipo no solo basados en PHP sino en muchos lenguajes de programación (ASP, ASP.NET, JSP, Perl, etc) pero a mi criterio el desarrollo de esta aplicacion no va a permitir adquirir un monton de conocimientos.

Me puse a investigar el soporte que PHP brinda al desarrollador para manejo de correos electronicos y me di cuenta que PHP provee una extensa librería para poder crear un cliente de correo electrónico Web así que me prepare una "jarrota" de café y me puse a diseñar la funcionalidad que quería implementar en mi cliente Web.

Al momento de estar diseñando la funcionalidad me surgió una interrogante, --cuantos desarrolladores de software saben realmente como funciona el correo electrónico. Tome mi teléfono y le marque a cinco personas que son desarrolladores de software y les pregunte si sabían como funcionaba el correo electrónico, no se si me junto con puros burrotes pero de 4 de las 5 personas no supieron que pedo o supieron solo los conceptos básicos (loosers) y SOLO!!! 1 persona tenia el conocimiento de funcionamiento de dicha tecnología que cabe aclarar no es nueva sin que data de los años 60’s.

Y recordando lo que mi compa el Ari Kasin dijo en su blog que es importante que se conozca la arquitectura en la que se va a trabajar pues ahí les va una introducción de cómo funciona el correo electrónico.

Antes de iniciar con la introducción déjenme les platico de cómo van a estar organizado esta serie de tutórales.
  • Primero que nada seria muy cansado el escribir un tutorial de inicio a fin y publicarlo en un post. Así que voy a dividir el tutorial en varia partes.
  • Cada parte lo voy a tratar de publicar cada lunes y digo voy a tratar porque a veces tengo mucho trabajo y me va a ser imposible cumplir con ese día pero esa es mi meta y voy a hacer todo lo posible por cumplirla. Si puedo liberar la siguiente parte dentro de la misma semana lo voy a hacer pero eso si no lo garantizo.
  • Todos los posts en este blog van a ser dedicados a este tutorial no voy a poner post hablando de otras cosas (para eso esta mi otro blog ityprogramacion).
  • Al finalizar voy a ver la manera de subir el código a un servidor para que todos tengan acceso a el.

ADVERTENCIA o sea (CMA)

Cabe mencionar que lo que programemos o aplicaciones que desarrollemos son puramente didacticos y son distribuidas tal y como están y se deja a discreción de los lectores si lo implementan total o parcial mente en un ambiente de producción esto como dije es responsabilidad del lector y yo me lavo las manos! así que no quiero correos agresivos o que se acuerden de mi madre o familia si echan a perder sus ambientes o datos de producción están advertidos.

Bueno esperen la primera entrega del tutorial de cómo crear un cliente de correo electrónico en los próximos días.

Saludos.

Friday, January 20, 2006

Una pequeña introduccion

El objetivo de este blog es para hablar del monton de posibilidades que ofrece el mundo del "open source" a los desarrolladores de software. mi principal enfoque va a ser el desarrollo de aplicaciones web usando tecnologias de codigo abierto como PHP y estandares de web como HTML, CSS, XML, etc.