POO
Abril - Mayo 2003
El API
JavaMail
Arturo Rodríguez Álamo
Rosa Rodríguez Herrero
Departamento de Informática y Automática
Universidad de Salamanca
Información de los autores:
Arturo Rodríguez Álamo
Estudiante de Ingeniería Técnica en Informática de Sistemas
Facultad de Ciencias – Universidad de Salamanca
tururodr@[Link]
Rosa Rodríguez Herrero
Estudiante de Ingeniería Técnica en Informática de Sistemas
Facultad de Ciencias – Universidad de Salamanca
rositarodr@[Link]
Este documento puede ser libremente distribuido.
© 2003 Departamento de Informática y Automática - Universidad de Salamanca.
Resumen
En este documento se pretende dar a conocer el funcionamiento del API JavaMail.
La primera parte de este documento se dedica a introducir en qué consiste JavaMail, así como a
dar a conocer los protocolos para la transferencia de mensajes y el funcionamiento de un
sistema de correo electrónico.
En la segunda parte se estudian detenidamente cada una de las clases que utiliza JavaMail.
En el tercer apartado se explica como implementar un sistema de correo electrónico: el envío y
la recepción de mensajes, archivos adjuntos, etc.
Finalmente, se incluye en el documento un ejemplo práctico.
Java Mail i
Tabla de Contenidos
1. Introducción al API JavaMail Página 1
1.1 ¿Qué es? Página 1
1.2 Funcionamiento de un sistema de correo electrónico Página 1
1.3 Protocolos relacionados Página 2
2. Clases que componen el API JavaMail Página 2
2.1 session Página 2
2.2 message Página 3
2.2.1 Estructura de un mensaje Página 4
2.2.2 Tipos de clase de mensaje Página 4
2.3 address Página 5
2.4 authenticator Página 6
2.5 transport Página 7
2.6 store Página 7
2.7 folder Página 8
3. Utilización de JavaMail Página 8
3.1 Envío de mensajes Página 8
3.2 Lectura de mensajes Página 8
3.3 Reenvío Página 9
3.4 Borrar un mensaje Página 10
3.5 Archivos adjuntos Página 11
3.6 Búsqueda de mensajes Página 11
4. Ejemplo práctico: Un cliente de correo Página 13
5. Conclusiones Página 16
6. Referencias Página 17
ii Java Mail
Índice de figuras
Figura 1: Servidor de e-mails y su cliente. Página 1
Figura 2: Funcionamiento de los sistemas de correo electrónico. Página 2
Figura 3: Estructura de un mensaje simple. Página 4
Figura 4: Estructura de un mensaje Multipart. Página 5
Figura 5: La capa del API JavaMail Página 17
Java Mail iii
1. Introducción al API JavaMail
El correo electrónico es una de las funciones más importantes que proporciona Internet. El API
JavaMail ofrece la posibilidad de desarrollar clientes de correo electrónico y aplicaciones de
Java compatibles con el correo.
1.1 ¿Qué es?
El API JavaMail es un paquete opcional para leer, componer y enviar mensajes electrónicos. Se
usa este paquete para crear programas similares a Eudora y Microsoft Outlook, por
ejemplo. Su propósito principal es leer y escribir e-mails e interaccionar con los
programas que se encargan del envío de estos mensajes usando el lenguaje de
programación Java.
Figura 1: Servidor de e-mails y su cliente
JavaMail está formada por un conjunto de clases abstractas que modelan las partes de un
sistema de correo electrónico. Estas clases son:
- session: define una sesión de correo básica.
- message: representa un mensaje de correo electrónico.
- address: indica la dirección a la que se va a enviar el mensaje
- authenticator: se utiliza para proteger accesos a recursos mediante un nombre de
usuario y una contraseña
- transport: representa un protocolo de transporte específico
- store: representa una base de datos de mensajes que es mantenida por un servidor de
correos electrónicos y agrupada por el usuario.
- folder: proporciona un método para recuperar los mensajes.
1.2 Funcionamiento de un sistema de correo electrónico
Los sistemas de correo electrónico están formados por dos componentes principales: un
cliente de correo, o agente del usuario (UA) y un servidor de correo, o agente de
transferencia de mensajes (MTA).
-1-
El API JavaMail
Los agentes de usuario permiten a los usuarios redactar y enviar mensajes de correo
electrónico y recuperarlos de los agentes de transferencia de mensajes. Ejemplos de agentes de
usuario son, por ejemplo Eudora y Outlook.
Los agentes de transferencia de mensajes son los que almacenan y reenvían el correo
electrónico de los agentes de usuario y admiten el intercambio de correo por una red o grupo de
redes, como por ejemplo los programas que actúan de servidor de correo electrónico como
Sendmail y Exchange.
Figura 2: Funcionamiento de los sistemas de correo electrónico
Para que los agentes de usuarios se puedan comunicar con los agentes de
transferencia de mensajes son necesarios una serie de protocolos, que se describen
brevemente en el siguiente punto.
1.3 Protocolos relacionados
Los protocolos que se utilizan con el API JavaMail son básicamente cuatro: SMTP, POP, IMAP
y MIME, aunque también se utiliza, por ejemplo, NNTP.
· SMTP
El protocolo Simple Mail Transfer Protocol (SMTP) define el mecanismo para enviar e-
mail. En el contexto del API JavaMail, un programa basado en JavaMail comunicará con
el servidor SMTP del proveedor de servicios que dejará el mensaje en el servidor SMTP
del receptor para que sea recogido por los usuarios.
· POP
Post Office Protocol; está actualmente en la versión 3. POP es el mecanismo que la
mayoría de la gente usa en Internet para conseguir su correo. Define el soporte de un sólo
buzón por cada usuario. POP no soporta, como habitualmente se cree, la capacidad de ver
-2-
A. Rodríguez y R. Rodríguez
cuántos mensajes de correo nuevos tiene un usuario. Estas capacidades se construyen en
programas como Eudora o Microsoft Outlook.
· IMAP
IMAP (Internet Message Access Protocol) es un protocolo más avanzado para recibir
mensajes y está actualmente en la versión 4. Para usar el IMAP, el servidor de correo
debe soportar este protocolo. Si el servidor de correo soporta IMAP, el programa basado
en JavaMail puede aprovecharse de los usuarios que tienen carpetas múltiples en el
servidor y estas carpetas se pueden compartir por varios usuarios
· MIME
Este protocolo (Multi-purpose Internet Mail Extensions) se ha desarrollado para poder
transmitir mensajes multimedia a través de las redes IP. Es, por tanto, una ampliación de
e-mail para la transmisión de información multimedia, que convierte en texto cualquier
clase de información y que la regenera al formato original en el destino.
· NNTP
El NNTP (Networks News Transport Protocol) se basa el servicio de news. Es un
protocolo basado en el modelo cliente/servidor que define el formato, la sintaxis y el
contenido de una conversación entre dos computadoras, donde "conversación" quiere
decir intercambio de grupos de noticias. NNTP fue diseñado de tal manera que los
artículos de noticias son guardados en una Base de Datos Central, permitiendo al usuario
seleccionar los que le interesan, indexarlos, etc.
2. Clases que componen el API JavaMail
Esencialmente, para manejar el API JavaMail hay que entender cómo usar las siete clases que la
componen.
2.1 session
La clase session define una sesión de correo básica. El objeto session utiliza un objeto
[Link] para obtener información, como el servidor de correo, el nombre de
usuario, la contraseña, y otra información que puede compartirse a lo largo de toda la
aplicación.
El constructor para la clase session es privado. Es posible obtener una sola sesión por
defecto que puede ser compartida con el método getDefaultInstance():
-3-
El API JavaMail
Properties props = new Properties();
// se rellena props con la información deseada.
Session session = [Link](props, null);
O se puede crear una única sesión con getInstance():
Properties props = new Properties();
// se rellena props con la información deseada.
Session session = [Link](props, null);
En ambos casos el argumento null es un objeto Authenticator que se verá más adelante.
En la mayoría de los casos, es suficiente usar la sesión compartida, incluso si se trabaja con
una sesión de correo para múltiples buzones de usuario. Se podrá añadir una combinación de
nombre de usuario y contraseña en un paso posterior en el proceso de comunicación.
2.2 message
Una vez que se tiene el objeto session, se puede crear un mensaje para enviar. Esto puede
hacerse con un objeto message.
2.2.1 Estructura de un mensaje:
La clase message define un conjunto de atributos y un contenido para un mensaje de correo
electrónico. Los atributos serán parejas de nombre-valor que especifican la información de la
dirección y definen la estructura del contenido del mensaje, es decir, su tipo de contenido. Los
mensajes pueden contener un único objeto que represente al contenido o, indirectamente, varios
objetos. En cualquier caso, el contenido es manejado con un objeto DataHandler que
proporciona una interfaz consistente para los datos, independientemente de su formato.
- Mensajes simples: van a tener un único objeto que representa al contenido, Éste será
manejado con un DataHandler. La estructura queda del siguiente modo:
Figura 3 – Estructura de un mensaje simple.
-4-
A. Rodríguez y R. Rodríguez
- Mensajes Multipart: son los mensajes que contienen varios objetos que representan el
contenido. El objeto DataHandler va a contener un objeto Multipart, que a su vez,
contiene objetos BodyPart. La estructura de un objeto BodyPart es similar a la de
un objeto simple ya que ambos implementan la parte que se corresponde con la interfaz
del mensajes:
Figura 4 – Estructura de un mensaje Multipart
2.2.2 Tipos de clases de mensaje
Dependiendo de las aplicaciones que se creen se utilizará uno de estos mensajes:
- Si se tiene una aplicación y el proveedor permite trabajar con mensajes que soportan el
estilo MIME, cosa que es bastante frecuente se puede implementar un mensaje con la
clase: [Link].
o Un MimeMessage es un mensaje que entiende los tipos MIME. Las cabeceras
de mensajes están restringidas a caracteres US-ASCII, aunque en ciertos
campos de cabecera se pueden codificar caracteres no ASCII.
o Para crearlo, se lo pasamos el objeto session al constructor de MimeMessage:
MimeMessage message = new MimeMessage(session);
o El mecanismo para configurar el contenido es el método setContent(), con
argumentos para el contenido y el tipo:
-5-
El API JavaMail
[Link]("Hello", "text/plain");
Sin embargo, si se trabaja con un MimeMessage y el mensaje es texto, es
posible usar su método setText() que sólo requiere el contenido real,
dejando por defecto el tipo a text/plain: [Link]("Hello");
o Para seleccionar el asunto del mensaje, se utiliza el método setSubject():
[Link]("First");
- Si la aplicación va a interaccionar con una que no soporta mensajes MimeMessage, el
mensaje debe ser implementado con una subclase.
2.3 address
Una vez que se ha definido una sesión y se ha creado un mensaje con contenido, hay que poner
dirección al e-mail con un objeto address de la clase:
[Link].
Para crear una dirección con sólo la dirección e-mail, se le pasa al constructor:
Address address = new InternetAddress("rector@[Link] ");
Si se pretende que aparezca el nombre junto a la dirección e-mail, también al constructor:
Address address = new InternetAddress("rector@[Link] ", "Battaner");
Es necesario crear objetos address para los campos from y to del mensaje. Una vez que
se han definido las direcciones, se conectan al mensaje de una de estas dos formas.
- Para identificar al que lo envía, se usa el método setFrom():
[Link](address)
Si el mensaje necesita varias direcciones from, se utiliza el método addFrom():
Address address[] = ...;
[Link](address);
- Para identificar a los receptores del mensaje, se utiliza el método addRecipient().
Este método requiere un tipo predefinido de mensaje junto a la dirección:
[Link](type, address)
Los tres tipos predefinidos de direcciones son: [Link],
[Link] y [Link]. Así, si se desea enviar
una copia de un mensaje a una persona, se hará de la siguiente manera:
Address toAddress = new InternetAddress("rector@[Link]");
Address ccAddress = new InternetAddress("vice-rector@[Link]");
[Link]([Link], toAddress);
[Link]([Link], ccAddress);
-6-
A. Rodríguez y R. Rodríguez
El API JavaMail no proporciona mecanismos para chequear la validez de una dirección e-
mail.
2.4 authenticator
El API JavaMail puede aprovecharse de un authenticator para proteger accesos a recursos
mediante un nombre de usuario y una contraseña. El authenticator JavaMail se encuentra
en el paquete [Link].
Para usar el authenticator se debe registrar con la sesión cuando se crea. Luego, el
authenticator será notificado cuando sea necesaria una autentificación. En ese momento, se
mostrará una ventana o se leerá el nombre del usuario y su contraseña de un fichero (si no está
encriptado no es seguro). Finalmente, se devuelve un objeto PasswordAuthentication del
método getPasswordAuthentication() al llamador.
Properties props = new Properties();
// rellenar props con la información necesaria.
Authenticator auth = new MyAuthenticator();
Session session = [Link](props, auth);
2.5 transport
La parte final del envío de un mensaje es usar la clase transport. Esta clase establece el
lenguaje específico del protocolo para enviar mensajes.
Se puede usar la versión por defecto de la clase sólo llamando al método estático send():
[Link](message);
Otra opción es obtener un ejemplar específico desde la sesión para el protocolo, pasándole
el nombre de usuario y la contraseña (en blanco si no son necesarias), enviar el mensaje, y
cerrar la conexión:
[Link]();
Transport transport = [Link]("smtp");
[Link](host, username, password);
[Link](message, [Link]());
[Link]();
Esta última forma es mejor cuando es necesario enviar varios mensajes, porque mantendrá
activa la conexión entre mensajes. El mecanismo básico send() hace una conexión separada al
servidor para cada llamada a método.
-7-
El API JavaMail
2.6 store
La clase store modela una base de datos de mensajes y su protocolo de acceso para obtener
estos mensajes. Después de obtener la sesión, se conecta a una clase store, probablemente
con un nombre de usuario y una contraseña y se le indica qué protocolo utilizar:
Store store = [Link]("imap");
Store store = [Link]("pop3");
[Link](host, username, password);
2.7 folder
Después de conectar al store, se debe obtener un folder, que debe estar abierto antes de
poder leer los mensajes que hay en su interior:
Folder folder = [Link]("INBOX");
[Link](Folder.READ_ONLY);
Message message[] = [Link]();
/* Esta operación no lee todos los mensajes del servidor, sólo
cuando realmente se necesita obtener una parte del mensaje, el
contenido es recuperado*/
Una vez que se recuperan los mensajes, se puede obtener sus contenidos con
getContent() o escribirlos en una cadena con writeTo() cuya salida también incluye las
cabeceras.
[Link](((MimeMessage)message).getContent());
Después de haber leído el e-mail, se cierra la conexión:
[Link](aBoolean);
[Link]();
El valor booleano pasado al método close() significa si se actualiza o no la carpeta
eliminando los mensajes borrados.
3. Utilización del API JavaMail
3.1 Envío de mensajes
Enviar un mensaje de e-mail implica obtener una sesión, crear y rellenar un mensaje y enviarlo.
Se puede especificar el servidor SMTP configurando la propiedad [Link] del
objeto Properties cuando se obtiene la sesión:
String host = ...;
-8-
A. Rodríguez y R. Rodríguez
String from = ...;
String to = ...;
Properties props = [Link]();
// Se indica el protocolo del servidor
[Link]("[Link]", host);
// Obtención de la sesión
Session session = [Link](props, null);
// Definición del mensaje: a quién va dirigido y su contenido
MimeMessage message = new MimeMessage(session);
[Link](new InternetAddress(from));
[Link]([Link],
new InternetAddress(to));
[Link]("Hola JavaMail");
[Link]("Bienvenido al API JavaMail");
// Finalmente, se envía el mensaje
[Link](message);
3.2 Lectura de mensajes
Para leer mensajes, se debe obtener una sesión, conectarse con el store apropiado para el
buzón, abrir la carpeta apropiada, y obtener los mensajes. No se debe olvidar cerrar la conexión
cuando se haya terminado.
String host = ...;
String username = ...;
String password = ...;
Properties props = new Properties();
// se obtiene la sesión
Session session = [Link](props, null);
// conexión con el buzón en el que se almacenan los mensajes
Store store = [Link]("pop3");
[Link](host, username, password);
// se indica la carpeta en la que se van a almacenar los mensajes
Folder folder = [Link]("INBOX");
[Link](Folder.READ_ONLY);
// se obtienen los mensajes
Message message[] = [Link]();
for (int i=0, n=[Link]; i<n; i++)
{
[Link](i + ": " + message[i].getFrom()[0]
+ "\t" + message[i].getSubject());
-9-
El API JavaMail
}
// se cierra la conexión
[Link](false);
[Link]();
El bloque de código anterior sólo muestra de quién viene el mensaje y el asunto. Para
mostrar el mensaje completo, se le preguntará al usuario si quiere verlo después de haya visto
los campos anteriores.
BufferedReader reader = new BufferedReader (
new InputStreamReader([Link]));
// se obtiene el directorio
Message message[] = [Link]();
for (int i=0, n=[Link]; i<n; i++)
{
[Link](i + ": " + message[i].getFrom()[0]
+ "\t" + message[i].getSubject());
[Link]("Quiere leer el mensaje? " +
"[SI para leer / NO para salir]");
String line = [Link]();
if ("SI".equals(line))
message[i].writeTo([Link]);
else if ("NO".equals(line))
break;
}
3.3 Reenvío
No existe una llamada para reenviar un mensaje, sino que se va a construir el mensaje a reenviar
trabajando con cada una de las partes que componen un mensaje.
Un mensaje puede estar compuesto por varias partes. Cada una de ellas es un BodyPart.
Las distintas partes del cuerpo de un mensaje se combinan en un objeto Multipart. Para
reenviar un mensaje, se crea una parte para el texto de un mensaje y una segunda parte para el
mensaje a reenviar. Ambas partes se combinan en un objeto Multipart. Para terminar se
añade el objeto al mensaje creado para reenviar, se le pone una dirección y se envía como si se
tratara de un mensaje normal.
// Creación del mensaje a reenviar.
Message forward = new MimeMessage(session);
// A continuación se rellena la cabecera
[Link]("Fwd: " + [Link]());
- 10 -
A. Rodríguez y R. Rodríguez
[Link](new InternetAddress(from));
[Link]([Link],
new InternetAddress(to));
// Se crea la parte del mensaje correspondiente al texto
BodyPart messageBodyPart = new MimeBodyPart();
[Link](
"Te reenvío el mensaje original:\n\n");
// Se crea un objeto Multipart
Multipart multipart = new MimeMultipart();
[Link](messageBodyPart);
// Se crea la parte en la que se incluirá el mensaje inicial
messageBodyPart = new MimeBodyPart();
[Link]([Link]());
// Se añade esta parte al objeto Multipart
[Link](messageBodyPart);
// Finalmente se asocia el objeto Multipart con el mensaje
[Link](multipart);
// Y se envía.
[Link](forward);
3.4 Borrar un mensaje
Borrar mensajes implica trabajar con las banderas asociadas con los mensajes. Para borrar
mensajes se deben seguir los siguientes pasos:
- Primero se debe abrir la carpeta en modo READ_WRITE:
[Link](Folder.READ_WRITE);
- Después se selecciona la bandera DELETED del mensaje:
[Link]([Link], true);
- Luego, cuando se haya procesado todos los mensajes, se cierras la carpeta, pasando un valor
true para purgar todos los mensajes borrados:
[Link](true);
3.5 Archivos adjuntos
Los archivos adjuntos son ficheros asociados a un mensaje de correo electrónico que
normalmente son mantenidos fuera del mensaje. JavaMail permite adjuntar recursos a los
mensajes y enviarlos.
Para enviar un mensaje que tenga un archivo adjunto se construye un mensaje completo,
con la dirección, y el contenido, que será un objeto Multipart. A continuación se añade una
- 11 -
El API JavaMail
parte para el texto del mensaje, que estará contenida en un objeto BodyPart y finalmente se crea
otra parte en la que el DataHandler para dicha parte será el archivo adjunto.
Si el archivo adjunto es un fichero, la fuente de datos es FileDataSource y si es una
URL es URLDataSource. Con estas fuentes se obtiene un DataSource que debe ser adjuntado
a la parte creada para el archivo adjunto con la función setDataHandler.
Para terminar hay que darle un nombre a este archivo que se ha adjuntado con la función
setFileName
// Definición del mensaje
Message message = new MimeMessage(session);
[Link](new InternetAddress(from));
[Link]([Link],
new InternetAddress(to));
[Link]("Archivo adjunto");
// Se crea la parte para el contenido del mensaje y se rellena
BodyPart messageBodyPart = new MimeBodyPart();
[Link]("Te adjunto el archivo");
// Se crea el objeto Multipart y se le añade el contenido
Multipart multipart = new MimeMultipart();
[Link](messageBodyPart);
// Se adjunta el archivo
messageBodyPart = new MimeBodyPart();
DataSource source = new FileDataSource(filename);
[Link](new DataHandler(source));
[Link](filename);
[Link](messageBodyPart);
// Se incluye en el objeto Multipart y se envía
[Link](multipart);
[Link](message);
Enviar un mensaje con un archivo adjunto es sencillo; sin embargo, obtenerlo no lo es ya que
los mensajes de tipo MIME no conocen los archivos adjuntos. Por ello, es preciso procesar cada
una de las partes del objeto Multipart para obtener el contenido principal. Las partes
marcadas con una disposición de [Link] son claramente archivos adjuntos, pero
éstos también pueden venir sin disposición o con una disposición de [Link]. Cuando la
disposición es [Link] o [Link], se graba el contenido de esa parte del
mensaje que tendrá el nombre del fichero original y su contenido:
Multipart mp = (Multipart)[Link]();
for (int i=0, n=[Link](); i<n; i++)
- 12 -
A. Rodríguez y R. Rodríguez
{
Part part = [Link](i));
String disp = [Link]();
if((disp!=null)&&(([Link]([Link])||([Link]
([Link])))
{
saveFile([Link](), [Link]());
}
}
Si la disposición es null, hay que obtener el tipo de la parte de la forma apropiada:
MimeBodyPart mbp = (MimeBodyPart)part;
if ([Link]("text/plain"))
{
...
}
else
{
...
}
3.6 Búsqueda de mensajes
JavaMail incluye un mecanismo de filtrado, que se encuentra en el paquete
[Link], con el que se pueden buscar mensajes que concuerden con una o varias
condiciones especificadas. La solicitud se realizará a la clase folder:
SearchTerm st = ...;
Message[] msgs = [Link](st);
Hay muchas clases disponibles para construir una sentencia SearchTerm. Las más habituales
son:
- AndTerm
- OrTerm
- NotTerm
- SendDateTerm
- BodyTerm
- FromTerm/FromStringTerm, RecipientTerm/RecipientStringTerm
- SubjectTerm
- 13 -
El API JavaMail
Ejemplo: expresión lógica que busca los mensajes que bien hayan sido enviados por la dirección
de correo busqueda@[Link] o bien que contengan la palabra “búsqueda” en el asunto
del mensaje
SearchTerm st = new OrTerm(new SubjectTerm("búsqueda"),
new FromStringTerm("busqueda@[Link]"));
Message[] msgs = [Link](st);
4. Ejemplo práctico: Un cliente de correo
Una vez que se han visto todas las clases que proporciona JavaMail y cómo pueden ser usadas,
por ejemplo para leer o enviar un mensaje, puede escribirse el código fuente para una pequeña
aplicación que dispone de una interfaz y que puede enviar un mensaje de correo electrónico a
una dirección específica.
El programa comienza estableciendo la dirección del host a la variable mailHost. Una vez
que éste queda identificado, se crearán los componentes que forman la GUI (Interfaz Gráfica de
Usuario) en la función IniciarComponentes.
El método SendMessage es el núcleo del procesamiento de mensajes del programa. En
este método se utilizan las clases vistas anteriormente para crear un objeto session, un objeto
message y un objeto transport.
Finalmente la clase ButtonHandler maneja los eventos que están asociados con la
interfaz del programa.
import [Link].*;
import [Link].*;
import [Link].*;
import [Link].*;
import [Link].*;
import [Link].*;
public class ClienteDeCorreo extends Frame
{
String mailHost = “[Link]”;
Label etiqPara = new Label (“Para: “);
Label etiqDe = new Label (“De: “);
Label etiqAsunto = new Label (“Asunto: “);
Label etiqConten = new Label (“Contenido: “);
TextField destino = new TextField ();
TextField origen = new TextField ();
- 14 -
A. Rodríguez y R. Rodríguez
TextField asunto = new TextField ();
TextField conten = new TextField ();
Button send = new Button (“Enviar Mensaje”);
public static void main (String args[])
{
ClienteDeCorreo app = new ClienteDeCorreo();
}
public ClienteDeCorreo()
{
super(“Cliente de Correo”);
crear ();
addWindowListener (new WindowEventHandler());
setSize (550, 450);
mostrar ();
}
void crear ()
{
IniciarComponentes();
[Link](new ButtonHandler());
}
void IniciarComponentes()
{
int x=10;
int y=50;
[Link](x,y,50,25);
[Link](x+70,y,300,25);
[Link](x,y+40,50,25);
[Link](x+70,y+40,300,25);
[Link](x,y+80,50,25);
[Link](x+70,y+80,300,25);
[Link](x,y+120,50,25);
[Link](x+70,y+120,300,100);
[Link](400, y, 100, 30);
add(etiqPara);
add(destino);
add(etiqDe);
add(origen);
add(etiqAsunto);
add(asunto);
- 15 -
El API JavaMail
add(etiqConten);
add(conten);
}
void sendMessage()
{
Properties props = new Properties();
[Link](“[Link]”, mailHost);
[Link](“[Link]”, [Link]());
Session session = [Link](props, null);
try
{
Message mens = new MimeMessage(sesion);
InternetAddress[] dir =
new InternetAddress([Link]());
[Link]([Link], dir);
[Link](new IntenetAddress ([Link]()));
[Link]([Link]());
[Link]([Link](), “text/plain”);
Transport tr = [Link](dir[0]);
[Link]();
[Link](mens,dir);
}
}
class ButtonHandler implements ActionListener
{
public void actionPerformed(ActionEvent ev)
{
String s = [Link]();
if ([Link](“Send Message”))
sendMessage();
}
}
}
4. Conclusiones
El API JavaMail ofrece una plataforma independiente para poder construir aplicaciones Java
basadas en el correo electrónico, ya sea para crear programas clientes de correo electrónico o
para permitir correo en programas como editores o navegadores.
- 16 -
A. Rodríguez y R. Rodríguez
El API JavaMail no está diseñado para poder implementar un servidor de correo
electrónico, si bien sirve como interfaz entre los agentes de transferencia de mensajes
independientemente del protocolo que se use en la transferencia de estos mensajes. Para ello,
proporciona una importante biblioteca de clases abstractas con las que implementar estas
aplicaciones. En este documento se ha pretendido mostrar cómo usar estas clases para realizar
acciones tan frecuentes como enviar o recibir un mensaje de correo electrónico.
Figura 5: La capa del API JavaMail
5. Referencias bibliográficas
- “Java 1.2 al descubierto” de Jamie Jaworski, editorial Prentice Hall-Sams.
- Tutorial de Sun sobre JavaMail: [Link]
- Tutorial de Programación de JavaMail: [Link]
- 17 -