Subscribe:

Labels

lunes, 4 de junio de 2012

Leer mensajes de nuestra bandeja de entrada de cuenta de e-mail Hotmail con POP3 desde una aplicación Java


Bueno hoy vamos a ver cómo mostrar mensajes de una cuenta de e-mail de Hotmail en una aplicación Java
Comenzaré mencionando que para esta operación los dos protocolos más usados son tanto POP3 como IMAP4. Las diferencias entre ambas podemos verlas más claramente en: http://www.e-sort.net/blog/index.php/2009/06/05/diferencias-entre-protocolos-pop-e-imap-de-correo-electronico/#comment-144 y claro también vale aclarar que para Hotmail no hay el servidor IMAP4, así que bueno vamos a hacerla en POP3, aunque esta no nos permite la gestión de carpetas; pues únicamente podemos manejar la carpeta INBOX (osea la Bandeja de entrada).

Vamos a desarrollar una pequeña "Bandeja de Entrada" de escritorio, que nos servirá para mostrar el contenido de los mensajes que contiene nuestra cuenta de Hotmail.



Para ello como ya es habitual vamos a listar las herramientas que necesitamos:

JavaMail.jarQue nos brindará las bondades de la API JavaMail.
Netbeans 7.0.1, indistintamente de cualquier otro IDE.


Aclarando que el presente ejemplo sólo mostrará aquellos mensajes que contengan texto plano. Pues ya en lo posterior desarrollaremos otros que tenga mayor funcionalidad.

Bueno sin más preámbulos vamos a ver nuestro proyecto:
Se denominará BandejaEntradaHotmail, la cual contará con los paquetes unsch.efpis.controlador, que contendrá a la clase ControladorBandejaDeEntrada.java; unsch.efpis.modelo, que contendrá a ModeloBandejaDeEntrada.java; unsch.efpis.vista, que contendrá VistaBandejaDeEntrada.java y por último unsch.efpis.pruebas, que contendrá a Pruebas.java

Ahora vayamos a mostrar la codificación de cada una de las clases anteriormente mencionadas:
La clase ModeloBandejaDeEntrada.java: La cual se encargará de hacer la consulta a la bandeja de entrada de nuestro correo y además obtener todos los mensajes que ella contiene.


La clase VistaBandejaDeEntrada.java: Es la interfaz que utilizaremos.


La clase ControladorBandejaDeEntrada.java: La cual se encargará de realizar la gestión entre el ModeloBandejaDeEntrada.java VistaBandejaDeEntrada.java.


y por último la clase Pruebas.java, que será nuestro punto de partida.


Bueno ahora veamos la parte demostrativa:
Tenemos un bandeja de mensajes como muestra la siguiente imagen, ella contiene algunos mensajes.

Al abrir una de ellas, vemos que tiene cierto contenido.

Esta es nuestra interfaz cargada de los "Asuntos" de los mensajes que estaban en la bandeja de entrada del correo.
NOTA IMPORTANTE: CUÁNTO MÁS MENSAJES TENGAS EN TU BANDEJA MÁS TIEMPO DEMORARÁ EN MOSTRARTE ESTA PRIMERA INTERFAZ; PUES EL FUNCIONAMIENTO DE POP3 ES ASÍ (DESCARGA EL CONTENIDO DE CADA UNO DE LOS MENSAJES A LA COMPUTADORA).

Al seleccionar una, nos muestra el mismo contenido que lo del correo, claro en texto simple...

Bueno, eso fue todo por el momento, ya saben... dudas y/o sugerencias háganlas llegar. Gracias!!

Ahhhhhhh y por favor si el material te fue útil ayúdame recomendando por las redes sociales; dando "Me gusta" en Javaenaccion en Facebook o "+1" en Google+, etc etc. en :D.

10 comentarios:

miguelo dijo...

me da un error de mensaje............

me dice que se agoto el tiempo para intentar conectar

Roger Soto dijo...

Hola Miguelo, veo que no muestras ningún tipo o número de error, pero lo más probable es que al hacer varios accesos secuenciales a tu cuenta de correo desde tu aplicación Java, el servidor lo bloquee; puesto que el número de accesos está limitado(por ejemplo en una hora puedes hacer 5 ó 6 accesos) en cierto lapso de tiempo, si mal no recuerdo es cada 1 hora que el servidor libera nuevamente tu cuenta. Bueno si aún persiste el error lo escribes para darle otro tratamiento. Nos vemos!

Unknown dijo...

A mi me sale el mismo error que miguelo, esperare a ver si después se conecta.

Por cierto, veo que no especificas puerto, ¿No es necesario?

Gracias

Roger Soto dijo...

Gracias por escribir, mira la limitación de conectarse por este protocolo "POP" es que como ya dije el número de accesos es limitado en cierto tiempo. Lo del puerto pues, no es necesario; no te preocupes por ello. Si es necesario sigue escribiendo por favor. Nos vemos!

Unknown dijo...

seria bueno que dejaras el proyecto o el .jar para verlo en accion ami me da este error javax.mail.MessagingException: Connect failed;
nested exception is:
java.net.ConnectException: Connection timed out: connect

Roger Soto dijo...

hola Joseph que tal, uhmmm sí, puede que tengas razón, para poderlo ver en acción; pero si vemos el problema que te resultó, podríamos deducir que se da una Excepción de conexión, osea: AL PARECER HICISTE MUCHAS CONEXIONES Y EL SERVIDOR QUE SE USA EN ESTE POST, NO LO PERMITE, como mencioné em el post, el número de accesos al servidor de hotmail es limitado, de ahí que si deseas usarlo nuevamente tienes que esperar cierto tiempo; aproximadamente 1 hora. Bueno espero haya dejado algo claro lo que podría estar sucediendo, si no es ello por favor; continúa escribiendo. Muchas gracias, hasta luego.

AntraX dijo...

Hola veo que el ultimo comentario es del 5 de abril de 2013 16:57 y me anime a hacer un comentario
Ya vi como compartes con nosotros tus conocimientos y la verdad yo te lo agradezco es por eso que te hago nuevamente esta petición de compartir con nosotros el .jar. Gracias
PD: Mi problema, cuando lleno con la contraseña y el Email ejecuto el programa y no pasa nada, ningún mensaje ni nada.
PD2:javax.mail.MessagingException: Connect failed;
nested exception is:
java.net.ConnectException: Connection timed out: connect
GENERACIÓN CORRECTA (total time: 17 minutes 51 seconds)

Roger Soto dijo...

hola AntraX, gracias por los escritos, pienso que los problemas que vienen suscitándose son por los últimos cambios que se hicieron en hotmail (pasar de hotmail a outlook), pues a mi me muestra un error como el siguiente: javax.mail.MessagingException: Connect failed;
nested exception is:
java.net.ConnectException: connect: Address is invalid on local machine, or port is not valid on remote machine. Ello a pesar de colocar datos correctos. Bueno, me disculpan si en estos momentos no subo el .jar, pues estoy en busca de una solución a todos esos problemas.

Unknown dijo...

hola gracias por el aporte pero me sale este error -->javax.mail.MessagingException: Connect failed;
nested exception is:
java.net.ConnectException: Connection timed out: connect

Unknown dijo...

Hola, me ha parecido muy interesante este articulo. E estado haciendo los mismos pasos que dejaste en el blog, ahora tengo dos errores una en el controlador y otra en la vista. es posible que me puedas ayudar? Saludos

Todo en Infolinks