Mini tutorial JavaMail Leer correos con JavaMail (Parte III)

Mini tutorial JavaMail – Leer correos con JavaMail (Parte III) Suponemos que ya te has bajado JavaMail y JAF. Ahora que sabemos como enviar un correo

8 downloads 103 Views 78KB Size

Story Transcript

Mini tutorial JavaMail – Leer correos con JavaMail (Parte III) Suponemos que ya te has bajado JavaMail y JAF. Ahora que sabemos como enviar un correo sencillo con JavaMail, vamos a ver cómo leer un correo. Leer un correo tonto de texto con JavaMail es bastante sencillo, pero si nuestro programa hace eso a piñón fijo, no podremos leer cualquier correo que nos llegue. La estructura real de un correo, con adjuntos y posibilidad de visualizarlo en texto plano o html es algo compleja, pero debemos tratarla para poder leer cualquier correo. En este tutorial haremos un ejemplo de lectura de correo con JavaMail, teniendo en cuenta todo esto, pero sin complicarnos demasiado la vida. Lo justo para ver cómo leer correos conJavaMail y empezar a entender la estructura de estos correos complejos. El comprender estos correos complejos nos ayudará, más adelante, a construir y enviar con JavaMail correos que van más allá de un simple texto. Servidor de gmail En el ejemplo, usaré una cuenta de gmail para conectarme con ella y obtener los correos del buzón inbox (carpeta de entrada). Si usas otro servidor de correo, deberás cambiar los parámetros de configuración de acuerdo a tu servidor. La configuración de gmail para leer los correos es la siguiente Tener POP habilitado. Entra en tu cuenta de gmail y arriba a la derecha pincha “configuración”. En la nueva pantalla pincha “Reenvio y correo POP”. Asegúrate de que pone “POP habilitado” o marca la opción “Habilitar POP para todos los mensajes que se reciban a partir de ahora”. Si no lo haces, no podrás acceder desde JavaMail a tus mensajes. Servidor de correo al que conectarse pop.gmail.com

Puerto de conexión 995 Conexión SSL Deshabilitar TLS Usuario

-la

dirección

de

correo,

usaré

[email protected]

y password válidos de gmail. Clases implicadas en la lectura de un correo Para leer los correos necesitamos básicamente las siguientes clases de JavaMail: Session, que representa de alguna forma la conexión con gmail. Store y Folder, que representan el almacén del servidor con los ocrreos y la carpeta dentro de ese almacén donde el servidor guarda los correos que queremos leer. Message, los mensajes que leeremos. Establecer la Session Para obtener la sesión con gmail necesitamos tener una instancia de la clase Session con la configuración adecuada. Esta instancia se obtiene llamando al métodoSession.getDefaultInstance(). El parámetro para este método es una clase java.util.Properties de java estándar. Como mencionamos anteriormente, Properties es una clase java que nos permite guardar datos de tipo texto asignándoles un nombre. Sería algo parecido a esto Properties p = new Properties(); p.setProperty(“un nombre”, “un valor”); p.setProperty(“PI”, “3.1416”); Para obtener una instancia correctamente configurada de Session, en la clase Properties que le pasemos deben estar fijadas determinadas parejas nombrevalor. Tienes una lista de todas las posibles propiedades que JavaMail tiene en cuenta en la API. Vamos a ver las concretas para la conexión con pop.gmail.com Properties prop = new Properties(); // Deshabilitamos TLS

prop.setProperty(“mail.pop3.starttls.enable”, “false”); // Hay que usar SSL prop.setProperty(“mail.pop3.socketFactory.class”,”javax.net.ssl.SSLSocketFact ory” ); prop.setProperty(“mail.pop3.socketFactory.fallback”, “false”); // Puerto 995 para conectarse. prop.setProperty(“mail.pop3.port”,”995″); prop.setProperty(“mail.pop3.socketFactory.port”, “995”); Con mail.pop3.starttls.enable a false deshabilitamos TLS. Para usar SSL debemos decirle a JMail como obtener un socket SSL, para ellos fijamos mail.pop3.socketFactory.class al nombre de clase que nos proporciona java

estándar

para

obtener

sockets

SSL,

es

decir, javax.net.ssl.SSLSocketFactory. Lo de mail.pop3.socketFactory.fallback es opcional. Si no lo fijamos, si falla el socket SSL JavaMail intentará con un socket normal. Puesto que es inútil -gmail sólo admite SSL-, ponemos esta propiedad a false para indicarle a JavaMail que no lo intente con sockets normales. Falta indicar el puerto 995 tanto para JavaMail como para la clase que crea sockets

SSL,

por

ello

fijamos

con

este

valor

dos

propiedades

distintas: mail.pop3.port ymail.pop3.socketFactory.port Con todo esto inicializado, ya podemos obtener nuestra instancia de Session Session sesion = Session.getInstance(prop); sesion.setDebug(true); Lo de setDebug(true) es sólo para obtener más información en la pantalla de lo que se está haciendo. Cuando nuestro programa funcione correctamente, podemos quitar esta línea. Obtener el Store y el Folder de Inbox Una vez que tenemos nuestro Session, tenemos que obtener la carpeta de correo entrante de nuestro servidor de correo. Para ello ponemos las siguientes

líneas de código Store store = sesion.getStore(“pop3”); store.connect(“pop.gmail.com”,”[email protected]”,”la password “); Folder folder = store.getFolder(“INBOX”); folder.open(Folder.READ_ONLY); A partir de Session obtenemos el almacen de correos Store con getStore(), indicando el protocolo “pop3” con nuestro servidor de correo. Con el Store establecemos la conexión con el servidor de correo, indicando nombre de host -pop.gmail.com-, usuario (la dirección de correo) y password. Para ello usamos el métodoconnect(). Finalmente, al Store le pedimos la carpeta Inbox con getFolder(“INBOX”). Este Folder hay que abrirlo, en principio para sólo lectura. Obtener los mensajes Antes de nada, que quede claro que según hayas puesto en gmail, puede que sólo obtengas los mensajes nuevos. Si vas siguiendo el ejemplo con código, envíate un mensaje a esa cuenta antes de ejecutar el programa, para asegurarte que tienes un mensaje nuevo sin leer. En mis pruebas no he podido bajarme correos que me he enviado desde mi mismo PC y con mi cliente de correo (Thunderbird), así que he tenido que entrar con el navagador en gmail y enviarme desde ahí correos a mí mismo. Para obtener los mensajes, símplemente hay que llamar a getMessages() de la clase Folder. Esto nos devolverá un array de Message, con los mensajes nuevos. Message [] mensajes = folder.getMessages(); Como primera medida sencilla y para ver algo, sacaremos por pantalla los campos From y Subject -asunto- del mensaje. El contenido del mensaje es más complejo y lo vemos en el siguiente apartado. Los campos From y Subject se obtienen con los métodos getFrom() y getSubject().

El getFrom() nos devuelve un array de Address, así que debemos ir leyendolos de uno en uno. El código para escribir esta información de cada mensaje puede ser como el siguiente for (int i=0;i

Get in touch

Social

© Copyright 2013 - 2024 MYDOKUMENT.COM - All rights reserved.