Ayude a presentar un libro electrónico que contiene una explicación más detallada de JavaMaiL
Parece que no hay ninguno por el momento. También lo estoy buscando. Vi un artículo en Internet. Me pregunto si puedo ayudarte:
Explicación detallada de JavaMail. API
Resumen:
La API JavaMail es un paquete opcional para leer, redactar y enviar mensajes electrónicos. Podemos usarlo para crear agentes de usuario de correo (Mail User Agent, MUA para abreviar) como Eudora, Foxmail y MS Outlook Express. ¡Echemos un vistazo a cómo la API JavaMail proporciona funcionalidad de acceso a la información! La API de JavaMail está diseñada para enviar y recibir mensajes electrónicos de manera independiente del protocolo. El artículo se centra en: cómo enviar y recibir mensajes electrónicos de manera independiente del protocolo, que es lo que describirá este artículo.
Declaración de derechos de autor: este artículo se puede reproducir libremente. Al reimprimir, asegúrese de indicar la fuente original y la información del autor del artículo y esta declaración en forma de hipervínculo
Autor: Cleverpig (autor). Blog:/page/cleverpig)
Texto original:/resource/article/44/44101_JavaMail.html
Palabras clave: java, mail, pop, smtp
1. Introducción a la API JavaMail
La API JavaMail es un paquete opcional para leer, redactar y enviar mensajes electrónicos. Podemos usarlo para crear agentes de usuario de correo (Mail User Agent, MUA para abreviar) como Eudora, Foxmail y MS Outlook Express. En lugar de enviar, entregar y reenviar correos electrónicos como sendmail u otros programas de Agente de transferencia de correo (MTA). Desde otra perspectiva, los usuarios de correo electrónico utilizamos programas MUA para leer y escribir correos electrónicos a diario, y MUA depende del MTA para manejar la entrega de correo electrónico.
Después de comprender la relación entre MUA y MTA, echemos un vistazo a cómo la API JavaMail proporciona funciones de acceso a la información. La API JavaMail está diseñada para enviar y recibir mensajes electrónicos de forma independiente del protocolo. Esta API se divide en dos partes:
Funciones básicas: cómo enviar y recibir mensajes electrónicos de forma independiente del protocolo. , que es también lo que este artículo describirá, pero a continuación verá que esto es solo una ilusión.
La segunda parte se basa en protocolos específicos, como los protocolos SMTP, POP, IMAP y NNTP. La API de JavaMail en esta parte es para comunicarse con el servidor y no está incluida en el contenido de este artículo.
2. Lista de protocolos relacionados
Antes de ingresar a la API de JavaMail, echemos un vistazo a los protocolos involucrados en la API. Los siguientes son los cuatro principales protocolos de transferencia de información que todo el mundo conoce y está feliz de utilizar todos los días:
SMTP
POP
IMAP
MIME
Por supuesto, los cuatro protocolos anteriores no son todos. También existen NNTP y algunos otros protocolos que se pueden usar para transmitir información, pero como no se usan comúnmente, no se mencionarán en él. Este artículo. Comprender estos cuatro protocolos básicos nos ayudará a utilizar mejor la API de JavaMail. Sin embargo, la API de JavaMail está diseñada para ser independiente del protocolo y actualmente no podemos superar las limitaciones de estos protocolos. Para ser precisos, si la función que utilizamos no es compatible con el protocolo de nuestra elección, entonces no es probable que la API de JavaMail nos dé esta habilidad mágicamente como un mago.
1. SMTP
El protocolo simple de transferencia de correo define un mecanismo para entregar correo. A continuación, utilizaremos un programa basado en Java-Mail para comunicarnos con el servidor SMTP de la empresa o ISP. Este servidor SMTP reenvía el correo electrónico al servidor SMTP del destinatario hasta que finalmente es obtenido por el destinatario a través del protocolo POP o IMAP.
Esto no requiere que el servidor SMTP admita el reenvío de correo autorizado, pero sí requiere que el servidor SMTP esté configurado correctamente (la configuración del servidor SMTP no tiene nada que ver con la API JavaMail).
2. POP
POP es un protocolo de correos, actualmente en su tercera versión, conocida como POP3. POP define un mecanismo sobre cómo los usuarios obtienen correo. Proporciona que cada usuario utilice un buzón de correo independiente. No se admiten todas las funciones con las que la mayoría de las personas están familiarizadas cuando usan POP, como verificar la cantidad de mensajes nuevos en su buzón. Esta función está integrada en Microsoft Outlook, lo que significa que el software de cliente de correo electrónico como Microsoft Outlook logra la función antes mencionada al consultar los correos electrónicos recibidos recientemente para calcular la cantidad de correos electrónicos nuevos. Por lo tanto, debemos prestar atención cuando utilizamos la API de JavaMail. Cuando necesitamos obtener información como la cantidad de correos electrónicos nuevos mencionados anteriormente, debemos calcularla nosotros mismos.
3. IMAP
IMAP utiliza un protocolo avanzado para recibir información. La versión actual es la versión 4, por lo que también se llama IMAP4. Cabe señalar que cuando se utiliza IMAP, el servidor de correo debe admitir este protocolo. Desde este aspecto, no podemos usar IMAP por completo para reemplazar POP y no podemos esperar que IMAP sea compatible en todas partes. Si el servidor de correo admite IMAP, entonces nuestro programa de correo podrá tener las siguientes funciones compatibles con IMAP: Cada usuario puede tener varios directorios en el servidor y estos directorios se pueden compartir entre varios usuarios.
Sus ventajas sobre POP son obvias, pero al intentar adoptar IMAP, nos dimos cuenta de que no es perfecto: porque IMAP necesita recibir nueva información de otros servidores, entregar esta información a los usuarios y mantener múltiples directorios para cada usuario, lo que supone una gran carga para el servidor de correo. Y una diferencia entre IMAP y POP es que los usuarios de POP descargarán correos electrónicos del servidor de correo cuando los reciban, mientras que IMAP permite a los usuarios acceder directamente al directorio de correo, por lo que cuando el servidor de correo realiza operaciones de respaldo, ya que cada uso prolongado de este sistema de correo El directorio de correo utilizado por muchos usuarios ocupará una gran cantidad de espacio, lo que provocará directamente que el espacio en disco en el servidor de correo se dispare.
4. MIME
MIME no es un protocolo para transmitir correos electrónicos. Como extensión del correo electrónico multipropósito, define el formato del contenido del correo electrónico: formato de mensaje, formato de archivo adjunto, etc. Algunos estándares RFC involucran MIME: RFC 822, RFC 2045, RFC 2046, RFC 2047. Los Matrixers interesados pueden leerlo. Como desarrolladores de la API de JavaMail, no necesitamos preocuparnos por estas definiciones de formato, pero estos formatos se utilizan en el programa.
5. NNTP y otros protocolos de terceros
Debido a que la API de JavaMail se diseñó con la separación de los proveedores de implementación de protocolos de terceros en mente, podemos agregar fácilmente algunos protocolos de terceros. SUN mantiene una lista de proveedores de implementación de protocolos de terceros: /products/javamail/Third_Party.html A través de esta lista, podemos encontrar los protocolos de terceros necesarios que no son compatibles con SUN: como NNTP, el protocolo de grupo de noticias y S. /MIME es un protocolo MIME seguro.
3. Instalación
1. Instalar JavaMail
Para utilizar la API de JavaMail, necesita descargar un archivo con el formato de nombre de archivo javamail-[versión].zip desde /products/javamail/downloads/index.html (este archivo incluye la implementación de JavaMail) y agregue el archivo mail.jar a CLASSPATH. Esta implementación proporciona soporte para SMTP, IMAP4 y POP3.
Nota: Después de instalar la implementación de JavaMail, encontraremos muchos programas de ejemplo simples e interesantes en el directorio de demostración.
Después de instalar JavaMail, también necesitamos instalar JavaBeans Activation Framework, porque este marco es requerido por la API de JavaMail. Si usamos J2EE, entonces no necesitamos descargar JavaMail por separado, ya que existe en J2EE.jar, solo necesitamos agregar J2EE.jar a CLASSPATH.
2. Instale JavaBeans Activation Framework
Descargue JavaBeans Activation Framework desde /products/javabeans/glasgow/jaf.html y agréguelo a CLASSPATH. Este marco agrega funciones para clasificar cualquier fragmento de datos y procesarlos. Estas características son requeridas por la API JavaMail. Aunque esta característica suena muy vaga, solo proporciona soporte básico de tipo MIME para nuestra API JavaMail.
En este punto, deberíamos haber agregado mail.jar y activación.jar a CLASSPATH.
Por supuesto, desde la perspectiva de la conveniencia, también puede copiar directamente estos dos archivos Jar al directorio lib/ext del directorio JRE.
4. Primera introducción a la API JavaMail
1. Comprender nuestro entorno JavaMail
A. Descripción general de la estructura de clases principales de JavaMail
Abra el archivo JavaMail.jar y encontraremos que hay algunas clases principales en el paquete javax.mail: sesión, mensaje, dirección, autenticador, transporte, tienda, y Carpeta. Y hay algunas subclases de uso común en el paquete javax.mail.internet.
B. Sesión
La clase Sesión define una sesión de correo electrónico básica. Al igual que la sesión Http, nuestro trabajo de envío y recepción de correos electrónicos se basa en esta sesión. El objeto Session utiliza el objeto java.util.Properties para obtener el servidor de correo, el nombre de usuario, la información de la contraseña y otra información compartida utilizada por toda la aplicación.
El constructor de la clase Session es privado, por lo que podemos usar el método de fábrica estático getDefaultInstance() proporcionado por la clase Session para obtener un objeto Session predeterminado:
Properties props = new Properties ();
// llena los accesorios con cualquier información
Session session = Session.getDefaultInstance(props, null);
O usa el método estático getInstance( ) Método de fábrica para obtener una sesión personalizada:
Properties props = new Properties();
// llenar los props con cualquier información
Session session = Session. getInstance (props, null);
No es difícil encontrar en los dos ejemplos anteriores que los segundos parámetros de los métodos getDefaultInstance() y getInstance() son ambos nulos. Esto se debe a que en los ejemplos anteriores. no se utiliza autorización por correo electrónico. La autorización se presentará en detalle a continuación.
En muchos ejemplos, es suficiente utilizar la sesión compartida al acceder al servidor de correo, incluso cuando se trabaja en buzones de varios usuarios.
C. Mensaje
Después de crear el objeto Sesión, podemos construir el cuerpo del mensaje que se envía. Aquí SUN proporciona el tipo de mensaje para ayudar a los desarrolladores a completar este trabajo. Dado que Message es una clase abstracta, en la mayoría de los casos utilizamos la subclase javax.mail.internet.MimeMessage, que utiliza tipos MIME y encabezados MIME para la información del buzón. El encabezado de información solo puede usar caracteres US-ASCII, y se usarán caracteres no ASCII codificándolos y convirtiéndolos a ASCII.
Para crear un objeto MimeMessage, debemos pasar el objeto Session como parámetro del constructor MimeMessage:
Mensaje MimeMessage = new MimeMessage(session);
Nota: Existen varios métodos de construcción para la clase MimeMessage, como el método de construcción que utiliza el flujo de entrada como parámetro.
Después de establecer el objeto MimeMessage, necesitamos configurar sus diversas partes. Para la clase MimeMessage, estas partes son la interfaz MimePart. La forma más básica de configurar el contenido del mensaje es llamar al método setContent() con parámetros que representan el contenido del mensaje y el tipo MIM:
message.setContent("Hello", "text/plain");
Sin embargo, si el contenido de información en el MimeMessage que usamos es texto, podemos usar directamente el método setText() para configurar convenientemente el contenido del texto.
message.setText("Hello");
De los dos métodos mencionados anteriormente, el último es más adecuado para información de texto. Para otros tipos de información, como la información HTML, se debe utilizar la primera.
No lo olvides, utiliza el método setSubject() para establecer el asunto del correo electrónico:
message.setSubject("First");
D. Dirección
En este punto, hemos establecido Sesión y Mensaje. A continuación, presentaremos cómo utilizar la clase de dirección de correo electrónico: Dirección. Al igual que Message, la clase Address es una clase abstracta, por lo que usaremos la subclase javax.mail.internet.InternetAddress.
Podemos crear una clase de dirección de correo electrónico pasando una cadena que represente una dirección de correo electrónico:
Dirección dirección = new InternetAddress("president@whitehouse.gov");
Si desea agregar un nombre después de la dirección de correo electrónico, puede crear una clase de dirección de correo electrónico con una dirección de correo electrónico y un nombre pasando dos parámetros: una cadena que represente la dirección de correo electrónico y el nombre:
Dirección dirección = new InternetAddress("president@whitehouse.gov", "George Bush");
La clase de dirección de correo electrónico analizada en este artículo está preparada para configurar el remitente y el destinatario del mensaje de correo electrónico. la clase de dirección de correo electrónico, configuramos el remitente del correo electrónico a través de los métodos de mensaje setFrom() y setReplyTo():
message.setFrom(address);
message .setReplyTo( dirección);
Si hay varias direcciones de remitente en el correo electrónico, podemos usar el método addForm() para agregar el remitente:
Dirección dirección[] = ...; /p>
message.addFrom(address);
Para configurar el destinatario, utilizamos el método addRecipient() para agregar el destinatario. Este método requiere el uso de la constante Message.RecipientType. para distinguir el destinatario Escriba:
message.addRecipient(tipo, dirección)
Las siguientes son las tres constantes de Message.RecipientType:
Message.RecipientType. .TO
Message.RecipientType.CC
Message.RecipientType.BCC
Entonces, si queremos enviar un correo electrónico al Presidente y enviar una copia a la Primera Dama, se utilizará el siguiente método:
Dirección a Dirección = nueva Dirección de Internet("vice.president@whitehouse.gov");
Dirección dirección cc = nueva Dirección de Internet("primera .lady@whitehouse.gov" ");
message.addRecipient(Message.RecipientType.TO, toAddress);
message.addRecipient(Message.RecipientType.CC, ccAddress);
La API JavaMail no proporciona un mecanismo para comprobar la validez de una dirección de correo electrónico. Por supuesto, podemos completar esta función nosotros mismos: verificar si los caracteres de la dirección de correo electrónico están escritos en el formato especificado por RFC822 o verificar a través del registro MX en el servidor DNS, etc.
E. Autenticador
Al igual que la clase java.net, la API JavaMail utiliza la clase de autorizador (Authenticator) para acceder a recursos protegidos en forma de nombre de usuario y contraseña. Aquí "recurso" se refiere al servidor de correo. Esta clase de autorizador de JavaMail (Authenticator) se puede encontrar en el paquete javax.mail.
Cuando usamos la clase abstracta Authenticator, debemos heredar la clase abstracta, y la clase heredada debe tener la función para devolver el objeto PasswordAuthentication (usado para almacenar el nombre de usuario y la contraseña utilizados para la autenticación) método getPasswordAuthentication () . Y debe registrarse en la sesión para que la sesión pueda saber qué clase usar durante la autenticación.
MyAuthenticator en el fragmento de código siguiente es una subclase de Authenticator.
Propiedades props = new Properties();
// llenar los props con cualquier información
Authenticator auth = new MyAuthenticator();
Sesión sesión = Session.getDefaultInstance(props, auth);
F. Transporte
La clase Transporte se utilizará al enviar información. Esta clase implementa un protocolo para enviar mensajes (comúnmente conocido como SMTP). Esta clase es una clase abstracta. Podemos usar el método estático send() de esta clase para enviar mensajes:
Transport.send(message). );
Por supuesto, existen varios métodos. También podemos obtener la instancia de Transporte correspondiente al protocolo correspondiente de la Sesión. Y establezca una conexión con el servidor de correo pasando parámetros como nombre de usuario, contraseña, nombre de host del servidor de correo, etc., y use el método sendMessage() para enviar la información, y finalmente cierre la conexión:
message.saveChanges(); // implícito con send()
Transporte transporte = session.getTransport("smtp");
transport.connect(host, nombre de usuario, contraseña) ;
transport .sendMessage(message, message.getAllRecipients());
transport.close();
Comentario: El método anterior es un buen método , especialmente cuando trabajamos juntos al enviar varios correos electrónicos en un servidor de correo. Porque en este momento continuaremos enviando correos electrónicos después de conectarnos al servidor de correo y luego cerraremos la conexión. El método básico de send() es conectarse al servidor de correo cada vez que se llama, lo cual es una forma ineficiente de enviar varios correos electrónicos en el mismo servidor de correo.
Nota: Si necesita monitorear el comando de correo durante el envío de correo, puede configurar el indicador de depuración antes de enviar:
session.setDebug(true).
G. Tienda y Carpeta
Recibir y enviar correos electrónicos son muy similares y requieren el uso de Sesión. Pero después de obtener la Sesión, necesitamos obtener un tipo específico de Tienda de la Sesión y luego conectarnos a la Tienda. La Tienda aquí representa el servidor de correo donde se almacena el correo. En el proceso de conexión a la Tienda, lo más probable es que necesite utilizar un nombre de usuario, contraseña o Autenticador.
// Tienda tienda = session.getStore("imap");
Tienda tienda = session.getStore("pop3");
store.connect (host, nombre de usuario, contraseña);
Después de conectarse a la Tienda, se devolverá un objeto Carpeta, es decir, un objeto de directorio, a través del método getFolder() de la Tienda. Podemos leer la información del correo electrónico de este. Carpeta:
Carpeta carpeta = store.getFolder("INBOX");
carpeta.open(Folder.READ_ONLY);
Mensaje mensaje[] = carpeta .getMessages( );
El ejemplo anterior primero obtiene la carpeta INBOX de la Tienda (solo una carpeta llamada INBOX es válida para el protocolo POP3), luego abre la carpeta en modo de solo lectura (Carpeta.READ_ONLY) modo, y finalmente llama al método getMessages() de Carpeta para obtener una matriz de todos los mensajes en el directorio.
Nota: Para el protocolo POP3, solo es válida una Carpeta llamada INBOX, pero para el protocolo IMAP, podemos acceder a múltiples Carpetas (piense en el protocolo IMAP mencionado anteriormente). Además, SUN adoptó un enfoque muy inteligente al diseñar el método getMessages() de Folder: primero reciba una nueva lista de correo y luego lea el contenido del correo del servidor de correo cuando sea necesario (como leer el contenido del correo).
Al leer el correo, podemos usar el método getContent() de la clase Message para recibir el correo o el método writeTo() para guardar el correo. El método getContent() solo recibe el contenido del correo (no). incluido el encabezado del correo electrónico). El método writeTo() incluirá el encabezado del correo electrónico.
System.out.println(((MimeMessage)message).getContent());
Después de leer el contenido del mensaje, no olvide cerrar la Carpeta y la Tienda.
folder.close(aBoolean);
store.close();
El parámetro de tipo booleano pasado al método Folder.close() indica si se elimina está en progreso Actualiza la carpeta después de manipular el correo electrónico.
H. ¡Sigue avanzando!
Después de explicar las siete definiciones de clases principales de Java Mail anteriores y comprender fragmentos de código simples, a continuación se explicará en detalle cómo usar estas clases para implementar las funciones avanzadas que debe completar la API de JavaMail.
5. Uso de la API JavaMail
Después de aclarar cómo funciona la parte principal de la API JavaMail, lo llevaré a aprender algunos casos de tareas sobre el uso de la API Java Mail.
1. Enviar correo electrónico
Después de obtener la sesión, cree y complete la información del correo electrónico y luego envíelo al servidor de correo. Este es el proceso de envío de correos electrónicos utilizando la API de correo de Java. Antes de enviar correos electrónicos, debemos configurar el servidor SMTP: configurando la propiedad mail.smtp.host de Propiedades.
Cadena host =...;
Cadena desde =...;
Cadena hasta =...;
/ / Obtener propiedades del sistema
Propiedades props = System.getProperties();
// Configurar servidor de correo
props.put("mail.smtp.host" , host);
// Obtener sesión
Sesión sesión = Session.getDefaultInstance(props, null);
// Definir mensaje
Mensaje MimeMessage = nuevo MimeMessage(sesión);
message.setFrom(nueva dirección de Internet(de));
message.addRecipient(Message.RecipientType.TO,
nueva dirección de Internet(a));
message.setSubject("Hola JavaMail");
message.setText("Bienvenido a JavaMail");
// Enviar mensaje
Transport.send(message);
Dado que se pueden generar excepciones durante el proceso de creación de información de correo electrónico y envío de correos electrónicos, debemos cambiar el código anterior. Póngalo en el bloque de estructura try-catch.
2. Recibir correo
Para leer el correo obtenemos la sesión, nos conectamos al almacén correspondiente del buzón, abrimos la Carpeta correspondiente y luego obtenemos el correo que queremos. Por supuesto, no lo olvides. para cerrar la conexión al final.
Cadena host = ...;
Cadena nombre de usuario = ...;
Cadena contraseña = ...;
/ / Crear propiedades vacías
Propiedades props = new Properties();
// Obtener sesión
Sesión sesión = Session.getDefaultInstance(props, null);
// Obtener la tienda
Tienda store = session.getStore("pop3");
store.connect(host, nombre de usuario, contraseña); p> p>
// Obtener carpeta
Carpeta carpeta = store.getFolder("INBOX");
carpeta.open(Folder.READ_ONLY);
// Obtener directorio
Mensaje mensaje[] = carpeta.getMessages();
for (int i=0, n=message.length; i System.out.println(i + ": " + mensaje[i].getFrom()[0] + "\t" + mensaje[i]. getSubject( )); } // Cerrar conexión folder.close(false); store.close() ; Lo que hace el código anterior es leer cada correo electrónico del buzón y mostrar la dirección del remitente y el asunto del correo electrónico. Desde un punto de vista técnico, existe la posibilidad de una excepción aquí: cuando la dirección del remitente está vacía, getFrom()[0] generará una excepción. El siguiente fragmento de código ilustra eficazmente cómo leer el contenido del correo electrónico. Después de mostrar el remitente y el asunto de cada correo electrónico, aparecerá un mensaje para confirmar si el usuario ha leído el correo electrónico. Si se ingresa SÍ. entonces, podemos usar el método Message.writeTo(java.io.OutputStream os) para enviar el contenido del correo electrónico a la consola. Para el uso específico de Message.writeTo(), consulte la API de JavaMail. Lector BufferedReader = nuevo BufferedReader ( nuevo InputStreamReader(System.in)); // Obtener directorio Mensaje mensaje[ ] = carpeta.getMessages(); for (int i=0, n=message.length; i System.out.println(i + ": " + mensaje[i].getFrom()[0] + "\t" + mensaje[i].getSubject()); System.out.println ("¿Quieres leer el mensaje? " + "[SÍ para leer/SALIR para finalizar]"); String line = lector.readLine(); if ("YES".equals(line)) { mensaje[i].writeTo(System.out); } else if ("SALIR". es igual(línea)) { ruptura; } } 3. Eliminar mensajes e indicadores Configurar indicadores relacionados con mensajes es un método común para eliminar mensajes. Estos indicadores representan algunos estados diferentes definidos por el sistema y por el usuario. Algunas banderas están predefinidas en la clase interna Flag de la clase Flags: Flags.Flag.ANSWERED Flags.Flag.DELETED Flags.Flag.DRAFT Banderas.Bandera.BANDERA Banderas.Bandera.RECIENTE Banderas.Bandera.VISTO Banderas.Bandera.USUARIO p> p> Pero tenga en cuenta al usarlo: la existencia de la bandera no significa que esta bandera sea compatible con todos los servidores de correo. Por ejemplo, para la operación de eliminación de correos electrónicos, el protocolo POP no admite nada de lo anterior. Así que determine qué banderas son compatibles accediendo al método getPermanetFlags() de un objeto Carpeta abierto, que devolverá el objeto de clase Flags actualmente admitido. Al eliminar un mensaje, podemos establecer el indicador ELIMINADO del mensaje: message.setFlag(Flags.Flag.DELETED, true); Pero primero, use Abrir la carpeta usando READ_WRITE: folder.open(Folder.READ_WRITE); Al cerrar la carpeta después de eliminar el correo, debe pasar un verdadero como eliminación mensaje excepto confirmación. folder.close(true); expunge(), otro método para eliminar correos en la clase Carpeta, también puede eliminar correos, pero Sun no lo proporciona. La implementación admite este método, mientras que otras implementaciones POP3 proporcionadas por terceros admiten o no este método. Además, introduzca un método para comprobar si un determinado indicador está configurado: el método Message.isSet(Flags.Flag flag), donde el parámetro es el indicador marcado. 4. Autenticación de correo electrónico Hemos aprendido anteriormente cómo usar la clase Authenticator en lugar de usar directamente las dos cadenas de nombre de usuario y contraseña como parámetros del método Session.getDefaultInstance() o Session.getInstance(). Después de la pequeña prueba anterior, ahora tendremos una comprensión completa de la autenticación de correo electrónico. En lugar de utilizar directamente las tres cadenas de nombre de host del servidor de correo, nombre de usuario y contraseña como forma de conectarse a la tienda POP3, utilizamos un archivo de propiedades que almacena la información del nombre de host del servidor de correo y en Pasar en la instancia personalizada del Autenticador al obtener la Sesión: // Propiedades de configuración Propiedades props = System.getProperties(); props.put( " mail.pop3.host", host); // Configurar autenticación, obtener sesión Authenticator auth = new PopupAuthenticator(); Sesión sesión = Session .getDefaultInstance(props, auth); // Obtener la tienda Tienda store = session.getStore("pop3"); store.connect ( ); La clase PopupAuthenticator hereda la clase abstracta Authenticator y devuelve el objeto de clase PasswordAuthentication sobrecargando el método getPasswordAuthentication() de la clase Authenticator. El parámetro del método getPasswordAuthentication() es una cadena que consta de nombre de usuario y contraseña separados por comas. importar javax.mail.*; importar java.util.*; clase pública PopupAuthenticator extiende Autenticador { Authenticación de contraseña pública getPasswordAuthentication(String param) { String nombre de usuario, contraseña; StringTokenizer st = new StringTokenizer(param, ","); nombre de usuario = st.nextToken (); contraseña = st.nextToken(); devolver nueva contraseñaAuthentication(nombre de usuario, contraseña); } } 5. Responder a un correo electrónico El método para responder a un correo electrónico es muy simple: use el método de respuesta() de la clase Mensaje y configure la dirección del destinatario y el asunto del correo electrónico de respuesta (si no se proporciona ningún asunto). , el sistema utilizará de forma predeterminada "Re: "como cuerpo del correo electrónico), no es necesario configurar ningún contenido del correo electrónico aquí, simplemente copie el remitente o responda al nuevo destinatario. El parámetro booleano en el método de respuesta () indica si se debe responder al remitente (el valor del parámetro es falso) o restaurarlo para todos (el valor del parámetro es verdadero). Además, la dirección de respuesta debe configurarse utilizando el método setReplyTo() al enviar una carta. Respuesta de MimeMessage = (MimeMessage)message.reply(false); reply.setFrom(new InternetAddress("president@whitehouse.gov")); reply.setText("Gracias"); Transport.send(respuesta); 6. Reenviar un correo electrónico El proceso de reenviar un correo electrónico no es tan simple como responder a un correo electrónico. Creará un correo electrónico reenviado, lo cual no se puede hacer con un solo método. Cada correo electrónico se compone de varias partes. Cada parte se denomina parte del cuerpo del correo electrónico, que es un objeto de clase BodyPart. Para los correos electrónicos de tipo MIME, es un objeto de clase MimeBodyPart. Estos cuerpos de correo electrónico están contenidos en contenedores llamados Multiparts. Para los correos electrónicos de tipo MIME, son objetos de clase MimeMultiPart. Al reenviar un correo electrónico, creamos una parte del cuerpo del correo electrónico de texto y una parte del cuerpo del correo electrónico de texto reenviado, y luego colocamos estos dos cuerpos de correo electrónico en una multiparte. Para explicarlo, la forma de copiar el contenido de un correo electrónico a otro correo electrónico es copiar solo su DataHandler (controlador de datos). Esta es una clase definida por JavaBeans Activation Framework. Proporciona acceso a comandos de operación de contenido de correo electrónico, administra operaciones de contenido de correo electrónico y es una interfaz coherente entre diferentes fuentes de datos y formatos de datos. // Crear el mensaje a reenviar Reenviar mensaje = new MimeMessage(session); // Rellenar encabezado reenviar .setSubject("Fwd: " + message.getSubject()); forward.setFrom(nueva dirección de Internet(de)); forward.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); // Crea tu nueva parte del mensaje BodyPart messageBodyPart = new MimeBodyPart(); messageBodyPart.setText( "Aquí tienes el mensaje original:\n\n"); // Crea una multiparte para combinar las partes Multipart multipart = new MimeMultipart(); multipart.addBodyPart(messageBodyPart); // Crea y completa la parte para el contenido reenviado messageBodyPart = new MimeBodyPart(); messageBodyPart.setDataHandler(message.getDataHandler()); // Agregar parte a varias partes multipart.addBodyPart(messageBodyPart) ; // Asociar multiparte con mensaje forward.setContent(multipart); // Enviar mensaje Tran