1 TEMA 7. El API JavaMail Introducción Introducción Clases básicas Clases básicas Ejemplos...

27
1 TEMA 7. TEMA 7. El API JavaMail El API JavaMail Introducción Introducción Clases básicas Clases básicas Ejemplos Ejemplos

Transcript of 1 TEMA 7. El API JavaMail Introducción Introducción Clases básicas Clases básicas Ejemplos...

Page 1: 1 TEMA 7. El API JavaMail Introducción Introducción Clases básicas Clases básicas Ejemplos Ejemplos.

11

TEMA 7. TEMA 7. El API JavaMailEl API JavaMail

Introducción Introducción Clases básicas Clases básicas EjemplosEjemplos

Page 2: 1 TEMA 7. El API JavaMail Introducción Introducción Clases básicas Clases básicas Ejemplos Ejemplos.

22

BibliografíaBibliografía

Sun. “Documentación de Java”. Sun. “Documentación de Java”. http://http://java.sun.comjava.sun.com . .

Traducciones al castellano en Traducciones al castellano en http://www.programacion.com/java/thttp://www.programacion.com/java/tutorial/javamailutorial/javamail

Page 3: 1 TEMA 7. El API JavaMail Introducción Introducción Clases básicas Clases básicas Ejemplos Ejemplos.

33

El API JavaMail es un paquete opcional (extensión El API JavaMail es un paquete opcional (extensión estándard) para leer, componer, y enviar mensajes estándard) para leer, componer, y enviar mensajes electrónicos. electrónicos.

El uso de este paquete esta orientado a la creación de El uso de este paquete esta orientado a la creación de programas de tipo MUA (programas de tipo MUA (Mail User AgentMail User Agent), similares ), similares a Thunderbird y Microsoft Outlook. a Thunderbird y Microsoft Outlook.

Su propósito principal por lo tanto no es transportar, Su propósito principal por lo tanto no es transportar, enviar, o re-enviar mensajes como sendmail u otros enviar, o re-enviar mensajes como sendmail u otros programas del tipo MTA (programas del tipo MTA (Mail Transfer AgentMail Transfer Agent). ).

En otras palabras, los usuarios interactúan con los En otras palabras, los usuarios interactúan con los programas para leer y escribir e-mails. Los programas programas para leer y escribir e-mails. Los programas MUA tratan con los programas MTA para el envío real. MUA tratan con los programas MTA para el envío real.

1 . Introducción

Uso del API JavaMail

Page 4: 1 TEMA 7. El API JavaMail Introducción Introducción Clases básicas Clases básicas Ejemplos Ejemplos.

44

El API JavaMail está diseñado para proporcionar El API JavaMail está diseñado para proporcionar acceso independiente del protocolo para enviar y acceso independiente del protocolo para enviar y recibir mensajes dividiéndose en dos partes: recibir mensajes dividiéndose en dos partes:

– La primera parte del API está orientada al La primera parte del API está orientada al envío y recepción de mensajes envío y recepción de mensajes independientemente del proveedor/protocolo.independientemente del proveedor/protocolo.

– La segunda parte esta orientada a los La segunda parte esta orientada a los lenguajes específicos del protocolo como lenguajes específicos del protocolo como SMTP, POP, IMAP, y NNTP. Con el API, JavaMail SMTP, POP, IMAP, y NNTP. Con el API, JavaMail para poder comunicar con un servidor, para poder comunicar con un servidor, necesitamos un necesitamos un proveedorproveedor para un para un protocolo. protocolo.

1 . Introducción

Uso del API JavaMail

Page 5: 1 TEMA 7. El API JavaMail Introducción Introducción Clases básicas Clases básicas Ejemplos Ejemplos.

55

Básicamente son cuatro: Básicamente son cuatro: – SMTP SMTP – POP POP – IMAP IMAP – MIME MIME – NNTP y otrosNNTP y otros

Aunque el API sea independiente del protocolo, Aunque el API sea independiente del protocolo, no podemos evitar las limitaciones de los no podemos evitar las limitaciones de los protocolos subyacentes. Si una capacidad no protocolos subyacentes. Si una capacidad no está soportada por el protocolo elegido, el API está soportada por el protocolo elegido, el API JavaMail no hará que esa capacidad aparezca JavaMail no hará que esa capacidad aparezca por arte de magia. por arte de magia.

1 . Introducción

Protocolos de mensajería

Page 6: 1 TEMA 7. El API JavaMail Introducción Introducción Clases básicas Clases básicas Ejemplos Ejemplos.

66

El protocolo El protocolo Simple Mail Transfer ProtocolSimple Mail Transfer Protocol (SMTP) está (SMTP) está definido por la definido por la RFC 821RFC 821. Define el mecanismo para enviar e-. Define el mecanismo para enviar e-mail. mail.

En el contexto del API JavaMail, nuestro programa basado en En el contexto del API JavaMail, nuestro programa basado en JavaMail comunicará con el servidor SMTP de nuestro JavaMail comunicará con el servidor SMTP de nuestro proveedor de servicios (ISP). Este servidor SMTP dejará el proveedor de servicios (ISP). Este servidor SMTP dejará el mensaje en el servidor SMTP del recipiente(s) para que sea mensaje en el servidor SMTP del recipiente(s) para que sea recogido por los usuarios a través de POP o IMAP. recogido por los usuarios a través de POP o IMAP.

Esto no requiere que nuestro servidor SMTP sea un rele Esto no requiere que nuestro servidor SMTP sea un rele abierto, pues se utiliza la autentificación, pero es nuestra abierto, pues se utiliza la autentificación, pero es nuestra responsabilidad asegurarnos de que el servidor SMTP se responsabilidad asegurarnos de que el servidor SMTP se configure correctamente. configure correctamente.

No hay nada en el API JavaMail sobre tareas como el No hay nada en el API JavaMail sobre tareas como el configuración de un servidor para retransmitir mensajes o configuración de un servidor para retransmitir mensajes o para agregar y para quitar cuentas del e-mail para agregar y para quitar cuentas del e-mail

1 . Introducción

SMTP

Page 7: 1 TEMA 7. El API JavaMail Introducción Introducción Clases básicas Clases básicas Ejemplos Ejemplos.

77

POP viene de POP viene de Post Office Protocol.Post Office Protocol. Actualmante en Actualmante en la versión 3, también conocido como POP3, la la versión 3, también conocido como POP3, la RFC 1939RFC 1939 define este protocolo. define este protocolo.

POP es el mecanismo que la mayoría de la gente usa POP es el mecanismo que la mayoría de la gente usa en Internet para conseguir su correo. Define el en Internet para conseguir su correo. Define el soporte de un sólo mailbox por cada usuario. soporte de un sólo mailbox por cada usuario.

Muchas de las cosas con las que estamos Muchas de las cosas con las que estamos familiarizados cuando usamos POP, como la capacidad familiarizados cuando usamos POP, como la capacidad de ver cuántos mensajes de correo nuevos tienen, no de ver cuántos mensajes de correo nuevos tienen, no lo soporta POP en absoluto. Estas capacidades se lo soporta POP en absoluto. Estas capacidades se construyen en programas como Eudora o Microsoft construyen en programas como Eudora o Microsoft Outlook. Outlook.

1 . Introducción

POP

Page 8: 1 TEMA 7. El API JavaMail Introducción Introducción Clases básicas Clases básicas Ejemplos Ejemplos.

88

IMAP es un protocolo más avanzado para recibir mensajes. IMAP es un protocolo más avanzado para recibir mensajes. Definido en la Definido en la RFC 2060RFC 2060, IMAP viene de , IMAP viene de Internet Message Internet Message Access ProtocolAccess Protocol, y está actualmente en la versión 4, , y está actualmente en la versión 4, también conocida como IMAP4. también conocida como IMAP4.

Para usar el IMAP, nuestro servidor de correo debe soportar Para usar el IMAP, nuestro servidor de correo debe soportar este protocolo. este protocolo.

Debido a las capacidades más avanzadas, podríamos pensar Debido a las capacidades más avanzadas, podríamos pensar que IMAP sería utilizado por todos. Pero no es así. que IMAP sería utilizado por todos. Pero no es así. Sobrecarga mucho el servidor de correo, requiriendo que el Sobrecarga mucho el servidor de correo, requiriendo que el servidor reciba los nuevos mensajes, los entregue a los servidor reciba los nuevos mensajes, los entregue a los usuarios cuando sean solicitados, y los mantiene en las usuarios cuando sean solicitados, y los mantiene en las distintas carpetas de cada usuario. distintas carpetas de cada usuario.

Aunque esto centraliza las copias de seguridad, también Aunque esto centraliza las copias de seguridad, también hace que las carpetas de correo a largo plazo de los hace que las carpetas de correo a largo plazo de los usuarios se hagan cada vez más grandes. usuarios se hagan cada vez más grandes.

Con POP, los mensajes recuperados son eliminados del Con POP, los mensajes recuperados son eliminados del servidor de correo. servidor de correo.

1 . Introducción

IMAP

Page 9: 1 TEMA 7. El API JavaMail Introducción Introducción Clases básicas Clases básicas Ejemplos Ejemplos.

99

Las clases básicas que componen el API: Las clases básicas que componen el API: – Session, Session, – Message, Message, – Address, Address, – Authenticator, Authenticator, – Transport, Transport, – Store, y Store, y – Folder. Folder.

Todas estas clases se encuentran en el Todas estas clases se encuentran en el paquete del nivel superior del API JavaMail paquete del nivel superior del API JavaMail (J2EE): javax.mail, aunque frecuentemente (J2EE): javax.mail, aunque frecuentemente nos veremos utilizando clases del paquete nos veremos utilizando clases del paquete javax.mail.internet. javax.mail.internet.

2 . Clases Básicas

javax.mail

Page 10: 1 TEMA 7. El API JavaMail Introducción Introducción Clases básicas Clases básicas Ejemplos Ejemplos.

1010

La clase La clase SessionSession define una sesión de correo básica. A define una sesión de correo básica. A partir de una sesión se usan el resto de clases. partir de una sesión se usan el resto de clases.

El objeto Session se aprovecha de un objeto El objeto Session se aprovecha de un objeto java.util.Propertiesjava.util.Properties para obtener información como el para obtener información como el servidor de correo, el nombre de usuario, la password, servidor de correo, el nombre de usuario, la password, y otras informaciones. y otras informaciones.

El constructor para las clases es privado. Podemos El constructor para las clases es privado. Podemos obtener una sola sesión por defecto que puede ser obtener una sola sesión por defecto que puede ser compartida con el método getDefaultInstance(): compartida con el método getDefaultInstance():

Properties props = new Properties(); Properties props = new Properties();

Session session = Session session = Session.getDefaultInstance(props, null); Session.getDefaultInstance(props, null);

2 . Clases Básicas

Session

Page 11: 1 TEMA 7. El API JavaMail Introducción Introducción Clases básicas Clases básicas Ejemplos Ejemplos.

1111

AlternativamenteAlternativamenteProperties props = new Properties(); Properties props = new Properties();

Session session = Session session = Session.getInstance(props, null);Session.getInstance(props, null);

En ambos casos el argumento null es un En ambos casos el argumento null es un objeto Authenticator que no se utiliza en este objeto Authenticator que no se utiliza en este momento, lo veremos más adelante en momento, lo veremos más adelante en AuthenticatorAuthenticator. .

2 . Clases Básicas

Session

Page 12: 1 TEMA 7. El API JavaMail Introducción Introducción Clases básicas Clases básicas Ejemplos Ejemplos.

1212

Para indicar el servidor de envío lo hacemos mediante Para indicar el servidor de envío lo hacemos mediante el objeto Properties, de la siguiente forma: el objeto Properties, de la siguiente forma:

String host= …;String host= …;

Properties props = System.getProperties(); Properties props = System.getProperties();

props.put("mail.smtp.host", host); props.put("mail.smtp.host", host);

Session session = Session session = Session.getDefaultInstance(props, null);Session.getDefaultInstance(props, null);

2 . Clases Básicas

Session

Page 13: 1 TEMA 7. El API JavaMail Introducción Introducción Clases básicas Clases básicas Ejemplos Ejemplos.

1313

Una vez que tenemos nuestro objeto Session, es hora Una vez que tenemos nuestro objeto Session, es hora de empezar a crear un mensaje para enviar. Esto se de empezar a crear un mensaje para enviar. Esto se hace con un objeto hace con un objeto MessageMessage. .

Siendo una clase abstracta, debemos trabajar con una Siendo una clase abstracta, debemos trabajar con una subclalse, en la mayoría de los casos será subclalse, en la mayoría de los casos será javax.mail.internet.MimeMessagejavax.mail.internet.MimeMessage. .

Un MimeMessage es un mensaje de e-mail que Un MimeMessage es un mensaje de e-mail que entiende los tipos MIME, definidos en las distintas entiende los tipos MIME, definidos en las distintas RFCs. RFCs.

Para crear un Message, le pasamos el objeto Session Para crear un Message, le pasamos el objeto Session al constructor de MimeMessage: al constructor de MimeMessage:

MimeMessage message = new MimeMessage(session); MimeMessage message = new MimeMessage(session);

2 . Clases Básicas

Message

Page 14: 1 TEMA 7. El API JavaMail Introducción Introducción Clases básicas Clases básicas Ejemplos Ejemplos.

1414

El mecanismo básico para configurar el contenido es El mecanismo básico para configurar el contenido es el método setContent(), con los argumentos para el el método setContent(), con los argumentos para el contenido y tipo mime: contenido y tipo mime: message.setContent("Hello", "text/plain");message.setContent("Hello", "text/plain");

Sin embargo, si sabemos que estámos trabajando con Sin embargo, si sabemos que estámos trabajando con un MimeMessage y nuestro mensaje es texto plano, un MimeMessage y nuestro mensaje es texto plano, podemos usar su método setText() que sólo requiere podemos usar su método setText() que sólo requiere el contenido real.el contenido real.message.setText("Hello");message.setText("Hello");

Para seleccionar el subject, usamos el método Para seleccionar el subject, usamos el método setSubject():setSubject():message.setSubject("First"); message.setSubject("First");

2 . Clases Básicas

Message

Page 15: 1 TEMA 7. El API JavaMail Introducción Introducción Clases básicas Clases básicas Ejemplos Ejemplos.

1515

Una vez que hemos creado la Session y el Message, y Una vez que hemos creado la Session y el Message, y también hemos rellenado el mensaje con contenido, es hora también hemos rellenado el mensaje con contenido, es hora de poner dirección a nuestra carta con un objeto de poner dirección a nuestra carta con un objeto AddressAddress. .

Como Message, Address es una clase abstracta. Usaremos Como Message, Address es una clase abstracta. Usaremos la clase la clase javax.mail.internet.InternetAddressjavax.mail.internet.InternetAddress. .

Para crear una dirección con sólo la dirección e-mail, se la Para crear una dirección con sólo la dirección e-mail, se la pasamos al constructor: pasamos al constructor: Address address = new Address address = new InternetAddress("[email protected]"); InternetAddress("[email protected]");

Si queremos que aparezca el nombre junto a la dirección e-Si queremos que aparezca el nombre junto a la dirección e-mail, también podemos pasárselo al constructor: mail, también podemos pasárselo al constructor: Address address = new Address address = new InternetAddress("[email protected]", "George InternetAddress("[email protected]", "George Bush"); Bush");

2 . Clases Básicas

Address

Page 16: 1 TEMA 7. El API JavaMail Introducción Introducción Clases básicas Clases básicas Ejemplos Ejemplos.

1616

Necesitaremos crear objetos address para los Necesitaremos crear objetos address para los campos from y to del mensaje. A menos que campos from y to del mensaje. A menos que el servidor lo evite, no hay nada que nos el servidor lo evite, no hay nada que nos impida enviar un mensaje que parezca que impida enviar un mensaje que parezca que viene de otra persona. viene de otra persona.

Una vez que hemos creado las direcciones, Una vez que hemos creado las direcciones, las conectamos al mensaje de una de estas las conectamos al mensaje de una de estas dos formas. Para identificar al que lo envía, dos formas. Para identificar al que lo envía, usamos los métodos setFrom() y usamos los métodos setFrom() y setReplyTo(). setReplyTo().

message.setFrom(address) Si nuestro message.setFrom(address) Si nuestro mensaje necesita varias direcciones "from", mensaje necesita varias direcciones "from", usamos el método addFrom(): usamos el método addFrom():

2 . Clases Básicas

Address

Page 17: 1 TEMA 7. El API JavaMail Introducción Introducción Clases básicas Clases básicas Ejemplos Ejemplos.

1717

Para identificar a los receptores del mensaje, usamos el método Para identificar a los receptores del mensaje, usamos el método addRecipient(). Este método requiere un addRecipient(). Este método requiere un Message.RecipientTypeMessage.RecipientType junto a la dirección. junto a la dirección.

message.addRecipient(type, address) message.addRecipient(type, address)

Los tres tipos predefinidos de direcciones son: Los tres tipos predefinidos de direcciones son: – Message.RecipientType.TO Message.RecipientType.TO – Message.RecipientType.CC Message.RecipientType.CC – Message.RecipientType.BCC Message.RecipientType.BCC

Por eso, si el mensaeje fuera dirigido al vice-presidete, enviando Por eso, si el mensaeje fuera dirigido al vice-presidete, enviando copia a la primera dama, esto sería lo apropiado: copia a la primera dama, esto sería lo apropiado:

Address toAddress = new Address toAddress = new InternetAddress("[email protected]"); InternetAddress("[email protected]");

Address ccAddress = new Address ccAddress = new InternetAddress("[email protected]");InternetAddress("[email protected]");

message.addRecipient(Message.RecipientType.TO, toAddress);message.addRecipient(Message.RecipientType.TO, toAddress);message.addRecipient(Message.RecipientType.CC, ccAddress); message.addRecipient(Message.RecipientType.CC, ccAddress);

2 . Clases Básicas

Address

Page 18: 1 TEMA 7. El API JavaMail Introducción Introducción Clases básicas Clases básicas Ejemplos Ejemplos.

1818

El API JavaMail puede aprovecharse de un El API JavaMail puede aprovecharse de un AuthenticatorAuthenticator para para proteger accesos a recursos mediante un nombre de usuario y proteger accesos a recursos mediante un nombre de usuario y una password. una password.

Para usar el Authenticator, subclasificamos la clase abstracta y Para usar el Authenticator, subclasificamos la clase abstracta y devolvemos un ejemplar devolvemos un ejemplar PasswordAuthenticationPasswordAuthentication del método del método getPasswordAuthentication(). getPasswordAuthentication().

Debemos registrar el Authenticator con la sesión cuando se Debemos registrar el Authenticator con la sesión cuando se crea. Luego, nuestro Authenticator será notificado cuando sea crea. Luego, nuestro Authenticator será notificado cuando sea necesaria una autentificación. Podríamos mostrar una ventana o necesaria una autentificación. Podríamos mostrar una ventana o leer el nombre de usuario y la password desde un fichero de leer el nombre de usuario y la password desde un fichero de configuración (aunque si no está encriptado no es seguro), configuración (aunque si no está encriptado no es seguro), devolviendolo al llamador como un objeto devolviendolo al llamador como un objeto PasswordAuthentication. PasswordAuthentication.

Properties props = new Properties(); Properties props = new Properties(); Authenticator auth = new MyAuthenticator(); Authenticator auth = new MyAuthenticator(); Session session = Session.getDefaultInstance(props, Session session = Session.getDefaultInstance(props,

auth); auth);

2 . Clases Básicas

AuthenticatorAuthenticator

Page 19: 1 TEMA 7. El API JavaMail Introducción Introducción Clases básicas Clases básicas Ejemplos Ejemplos.

1919

La parte final del envío de un mensaje La parte final del envío de un mensaje es usar la clase es usar la clase TransportTransport. Estas clase . Estas clase habla el lenguaje específico del habla el lenguaje específico del protocolo para enviar mensajes protocolo para enviar mensajes (normalmente SMTP). Es una clase (normalmente SMTP). Es una clase abstracta y funciona como Session. abstracta y funciona como Session.

Podemos usar la versión por defecto Podemos usar la versión por defecto de la clase sólo llamando al método de la clase sólo llamando al método estático send(): estático send(): Transport.send(message); Transport.send(message);

2 . Clases Básicas

Transport

Page 20: 1 TEMA 7. El API JavaMail Introducción Introducción Clases básicas Clases básicas Ejemplos Ejemplos.

2020

O, podemos obtener un ejemplar específico desde la sesión O, podemos obtener un ejemplar específico desde la sesión para nuestro protocolo, pasándole el nombre de usuario y la para nuestro protocolo, pasándole el nombre de usuario y la password (en blanco si no son necesarias), enviar el password (en blanco si no son necesarias), enviar el mensaje, y cerrar la conexión: mensaje, y cerrar la conexión:

message.saveChanges(); message.saveChanges(); Transport transport = session.getTransport("smtp"); Transport transport = session.getTransport("smtp");

transport.connect(host, username, password);transport.connect(host, username, password); // envia el mensaje a la lista de destinatarios// envia el mensaje a la lista de destinatarios // los del mensaje o los que pongamos// los del mensaje o los que pongamos transport.sendMessage(message, transport.sendMessage(message,

message.getAllRecipients());message.getAllRecipients()); transport.close(); transport.close();

Esta última forma es mejor cuando necesitamos enviar Esta última forma es mejor cuando necesitamos enviar varios mensajes, porque mantendrá activa la conexión entre varios mensajes, porque mantendrá activa la conexión entre mensajes. El mecanismo básico send() hace un conexión mensajes. El mecanismo básico send() hace un conexión separada al servidor para cada llamada a método. separada al servidor para cada llamada a método.

2 . Clases Básicas

Transport

Page 21: 1 TEMA 7. El API JavaMail Introducción Introducción Clases básicas Clases básicas Ejemplos Ejemplos.

2121

Obtener los mensajes empieza de forma Obtener los mensajes empieza de forma similar a enviar mensajes, con una Session. similar a enviar mensajes, con una Session.

Sin embargo, después de obtener la sesión, Sin embargo, después de obtener la sesión, conectamos a un Store, probablemente con conectamos a un Store, probablemente con un nombre de usuario y una password o un nombre de usuario y una password o Authenticator. Como con Transport, le Authenticator. Como con Transport, le decimos al Store qué protocolo utilizar: decimos al Store qué protocolo utilizar:

Store store = session.getStore("imap"); Store store = session.getStore("imap"); Store store = session.getStore("pop3"); Store store = session.getStore("pop3"); store.connect(host, username, password); store.connect(host, username, password);

2 . Clases Básicas

Store y Folder

Page 22: 1 TEMA 7. El API JavaMail Introducción Introducción Clases básicas Clases básicas Ejemplos Ejemplos.

2222

Después de conectar al Store, podemos Después de conectar al Store, podemos obtener un Folder, que debe estar abierto obtener un Folder, que debe estar abierto antes de poder leer los mensajes que hay en antes de poder leer los mensajes que hay en su interior: su interior:

Folder folder = Folder folder = store.getFolder("INBOX"); store.getFolder("INBOX");

folder.open(Folder.READ_ONLY); folder.open(Folder.READ_ONLY); Message message[] = Message message[] = folder.getMessages();folder.getMessages();

Para POP3, la única carpeta disponible es Para POP3, la única carpeta disponible es INBOX. Si estamos usando IMAP, podremos INBOX. Si estamos usando IMAP, podremos disponer de otras carpetas. disponer de otras carpetas.

2 . Clases Básicas

Store y Folder

Page 23: 1 TEMA 7. El API JavaMail Introducción Introducción Clases básicas Clases básicas Ejemplos Ejemplos.

2323

Una vez que tenemos un Message para leer, podemos Una vez que tenemos un Message para leer, podemos obtener sus contenidos con getContent() o escribir sus obtener sus contenidos con getContent() o escribir sus contenidos en un stream con writeTo(). contenidos en un stream con writeTo().

El método getContent() sólo obtiene el contenido del El método getContent() sólo obtiene el contenido del mensaje, mientras que la salida de writeTo() incluye las mensaje, mientras que la salida de writeTo() incluye las cabeceras. cabeceras.

System.out.println(((MimeMessage)message).getContent())System.out.println(((MimeMessage)message).getContent())

Después de haber leído el e-mail, cerramos la conexión Después de haber leído el e-mail, cerramos la conexión al folder y al store. al folder y al store.

folder.close(aBoolean); folder.close(aBoolean); store.close();store.close();

El valor booleno pasado al método close() del folder El valor booleno pasado al método close() del folder significa si actualizamos o no la carpeta eliminando los significa si actualizamos o no la carpeta eliminando los mensajes borrados. mensajes borrados.

2 . Clases Básicas

Store y Folder

Page 24: 1 TEMA 7. El API JavaMail Introducción Introducción Clases básicas Clases básicas Ejemplos Ejemplos.

2424

Borrar mensajes implica trabajar con las Flags asociadas con Borrar mensajes implica trabajar con las Flags asociadas con los mensajes. Hay diferentes banderas para diferentes los mensajes. Hay diferentes banderas para diferentes estados, algunas definidas por el sistema y otras definidas por estados, algunas definidas por el sistema y otras definidas por el usuario. el usuario.

Las banderas predefinidas se definen en forma de clase Las banderas predefinidas se definen en forma de clase interna Flags.Flag y se listan abajo: interna Flags.Flag y se listan abajo:

– Flags.Flag.ANSWERED Flags.Flag.ANSWERED – Flags.Flag.DELETED Flags.Flag.DELETED – Flags.Flag.DRAFT Flags.Flag.DRAFT – Flags.Flag.FLAGGED Flags.Flag.FLAGGED – Flags.Flag.RECENT Flags.Flag.RECENT – Flags.Flag.SEEN Flags.Flag.SEEN – Flags.Flag.USER Flags.Flag.USER

Sólo porque una bandera exista no significa que sea soportada Sólo porque una bandera exista no significa que sea soportada por todos los proveedores/servidores de correo. Para conocer por todos los proveedores/servidores de correo. Para conocer las banderas soportadas, solicitamos la carpeta con las banderas soportadas, solicitamos la carpeta con getPermanentFlags(). getPermanentFlags().

2 . Clases Básicas

Borrar mensajes

Page 25: 1 TEMA 7. El API JavaMail Introducción Introducción Clases básicas Clases básicas Ejemplos Ejemplos.

2525

Para borrar mensajes, seleccionamo la bandera DELETED del Para borrar mensajes, seleccionamo la bandera DELETED del mensaje:mensaje:

message.setFlag(Flags.Flag.DELETED, true); message.setFlag(Flags.Flag.DELETED, true);

Primero debemos abrir la carpeta en modo READ_WRITE: Primero debemos abrir la carpeta en modo READ_WRITE:

folder.open(Folder.READ_WRITE); folder.open(Folder.READ_WRITE);

Luego, cuando hayamos procesado todos los mensajes, cerramos Luego, cuando hayamos procesado todos los mensajes, cerramos la carpeta, pasando un valor true para purgar todos los mensajes la carpeta, pasando un valor true para purgar todos los mensajes borrados. folder.close(true); borrados. folder.close(true);

Hay un método expunge() de Folder que puede usarse para borrar Hay un método expunge() de Folder que puede usarse para borrar los mensajes. Sin embargo, no funciona con el proveedor POP3 de los mensajes. Sin embargo, no funciona con el proveedor POP3 de Sun. Sun.

Para deseleccionar una bandera, sólo pasando false al método Para deseleccionar una bandera, sólo pasando false al método setFlag(). Para ver si una bandera está seleccionada, lo setFlag(). Para ver si una bandera está seleccionada, lo comprobamos con isSet(). comprobamos con isSet().

2 . Clases Básicas

Borrar mensajes

Page 26: 1 TEMA 7. El API JavaMail Introducción Introducción Clases básicas Clases básicas Ejemplos Ejemplos.

2626

import java.util.Properties; import java.util.Properties; import javax.mail.*; import javax.mail.*; import javax.mail.internet.*; import javax.mail.internet.*; public class MailExample { public class MailExample {

public static void main (String args[]) throws Exception { public static void main (String args[]) throws Exception { String host = args[0]; String from = args[1]; String to = args[2]; String host = args[0]; String from = args[1]; String to = args[2]; // Get system properties// Get system properties Properties props = System.getProperties(); Properties props = System.getProperties(); // Setup mail server// Setup mail server props.put("mail.smtp.host", host); props.put("mail.smtp.host", host); // Get session// Get session Session session = Session.getDefaultInstance(props, null); Session session = Session.getDefaultInstance(props, null); // Define message// Define message MimeMessage message = new MimeMessage(session); MimeMessage message = new MimeMessage(session); // Set the from address// Set the from address message.setFrom(new InternetAddress(from)); message.setFrom(new InternetAddress(from)); // Set the to address// Set the to address message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); // Set the subject // Set the subject message.setSubject("Hello JavaMail"); message.setSubject("Hello JavaMail"); // Set the content// Set the content message.setText("Welcome to JavaMail"); message.setText("Welcome to JavaMail"); // Send message// Send message Transport.send(message); } } Transport.send(message); } }

3 . Ejemplos

Enviar mensajes

Page 27: 1 TEMA 7. El API JavaMail Introducción Introducción Clases básicas Clases básicas Ejemplos Ejemplos.

2727

Properties props = new Properties(); Properties props = new Properties(); props.put("mail.smtp.host", "my-mail-server"); props.put("mail.smtp.host", "my-mail-server"); props.put("mail.from", "[email protected]"); props.put("mail.from", "[email protected]"); Session session = Session.getInstance(props, null); Session session = Session.getInstance(props, null); try { try {

MimeMessage msg = new MimeMessage(session); MimeMessage msg = new MimeMessage(session); msg.setFrom(); msg.setFrom(); msg.setRecipients(Message.RecipientType.TO, msg.setRecipients(Message.RecipientType.TO, "[email protected]"); "[email protected]");

msg.setSubject("JavaMail hello world example"); msg.setSubject("JavaMail hello world example"); msg.setSentDate(new Date());msg.setSentDate(new Date()); msg.setText("Hello, world!\n"); Transport.send(msg); msg.setText("Hello, world!\n"); Transport.send(msg); } catch (MessagingException mex)} catch (MessagingException mex) { System.out.println("send failed, exception: " +{ System.out.println("send failed, exception: " + mex); } mex); }

3 . Ejemplos

Enviar mensajes