Descripción general
1. Normas relacionadas con el correo electrónico
Los programas de servicio de Javamail proporcionados por los fabricantes pueden implementar selectivamente ciertos protocolos de correo, los protocolos de correo común incluyen:
SMTP (protocolo de transferencia de correo simple) es un protocolo de transferencia de correo simple. Es un conjunto de reglas para transmitir correo desde la dirección de origen a la dirección de destino. Controla el método de tránsito de las letras.
POP3 (Post Office Protocolo versión 3): es un protocolo estándar utilizado para recibir correos electrónicos.
IMAP (Protocolo de acceso al correo de Internet): es decir, Protocolo de acceso a correo de Internet. Es un protocolo alternativo para POP3.
Estos tres protocolos tienen protocolos correspondientes a la transmisión cifrada SSL, a saber, SMTPS, POP3 y IMAP.
MIME (Extensiones de correo de Internet multipropósito): es decir, el estándar de extensión de correo de Internet multipropósito. No es un protocolo de transferencia de correo. Sin embargo, el formato se define para mensajes, archivos adjuntos y otros contenidos que se transmiten.
2. Introducción a Javamail
Javamail es una API publicada por Sun para manejar el correo electrónico. No está incluido en Java SE, pero es parte de Java EE.
Mail.Jar: este archivo JAR contiene los proveedores de servicios SMTP, IMAP y POP3 proporcionados por el sol;
Activation.jar: este archivo JAR contiene implementaciones de la API JAF y Sun.
Las clases principales utilizadas en los paquetes de Javamail para procesar correos electrónicos son: propiedades, sesión, mensaje, dirección, autenticador, transporte, tienda, etc.
3. Proceso de transferencia de correo
Como se muestra en la imagen de arriba, los pasos para procesar correos electrónicos son los siguientes:
4. Estructura de mensajes
Clase Mimemessage: representa todo el correo electrónico.
Clase MimeBodyPart: un mensaje MIME que representa el mensaje.
Clase Mimemultipart: representa una información MIME combinada compuesta de múltiples información MIME.
5. La clase central de Javamail
Javamail proporciona una abstracción de alto nivel de enviar y recibir correos electrónicos, formando algunas interfaces y clases clave, que forman la base del programa. Echemos un vistazo a estos objetos más comunes.
6. Java.util.Properties Class (Objeto de propiedad)
La clase java.util.properties representa un conjunto de propiedades.
Cada una de sus claves y valores es de Type String.
Dado que Javamail necesita comunicarse con el servidor de correo, esto requiere que el programa proporcione mucha información, como dirección del servidor, puerto, nombre de usuario, contraseña, etc. Javamail encapsula esta información de atributos a través del objeto Propiedades.
Ejemplo: por ejemplo, el siguiente código encapsula varias información de atributos:
Propiedades prop = new Properties (); prop.setProperty ("mail.debug", "true"); prop.setProperty ("mail.host", "[correo electrónico protegido]"); prop.setProperty ("mail.transport.protocol", "smtp"); prop.setProperty ("mail.smtp.auth", "verdadero");Para diferentes protocolos de correo, Javamail estipula que los proveedores de servicios deben admitir una serie de atributos.
La siguiente tabla son algunos atributos comunes (los valores de los atributos se establecen como tipo de cadena, y la barra de tipo de atributo solo indica cómo se analizan los atributos)::
7. Javax.Mail.Session Class (objeto de sesión)
La sesión representa una sesión de correo.
Las funciones principales de la sesión incluyen dos aspectos:
Reciba varias información de atributo de configuración: Información de atributo Conjunto a través del objeto Propiedades;
Inicialice el entorno Javamail: inicialice el entorno Javamail de acuerdo con el archivo de configuración de Javamail para crear instancias de otras clases importantes a través del objeto de sesión.
Javamail proporciona información de configuración básica a través de los siguientes archivos en el directorio meta-INF del paquete JAR para que la sesión pueda cargar la clase de implementación del proveedor de acuerdo con este archivo de configuración:
javamail.default.providers;
javamail.default.address.map.
ejemplo:
Propiedades props = new Properties (); props.setProperty ("mail.transport.protocol", "smtp"); sesión session = session.getInstance (props);8. Javax.mail.Transport Clase (transferencia de correo)
Solo hay dos formas de manejar las operaciones de correo electrónico: enviar o recibir.
Javamail describe estas dos operaciones diferentes como transmisión (javax.mail.transport) y almacenamiento (javax.mail.store), transmitiendo el envío del correo correspondiente y almacenando la recepción del correo correspondiente.
GetTransport: GetTransport () en la clase de sesión tiene múltiples métodos sobrecargados que se pueden usar para crear objetos de transporte.
Connect: si el comando de autenticación - mail.smtp.auth se establece, luego cuando se conecta al servidor utilizando el método de conexión de la clase de transporte, se debe agregar el nombre de usuario y la contraseña.
SendMessage: el método SendMessage de la clase de transporte se utiliza para enviar mensajes de correo.
Cerrar: el método de cierre de la clase de transporte se utiliza para cerrar la conexión al servidor de correo.
9. Javax.Mail.Store Clase (almacenamiento de correo)
GetStore: GetStore () en la clase de sesión tiene múltiples métodos sobrecargados que se pueden usar para crear objetos de almacenamiento.
Connect: si el comando de autenticación - mail.smtp.auth está configurado, entonces cuando se conecta al servidor utilizando el método de conexión de la clase de almacenamiento, se debe agregar el nombre de usuario y la contraseña.
GetFolder: el método GetFolder de la clase de almacenamiento puede obtener el objeto de carpeta de carpeta en el buzón.
Cerrar: el método de cierre de la clase de almacenamiento se utiliza para cerrar la conexión al servidor de correo.
10. Javax.mail.message (objeto de mensaje)
javax.mail.message es una clase abstracta que solo puede ser instanciada por subclases, y en la mayoría de los casos es javax.mail.internet.mimemessage.
Mimemessage representa un mensaje de correo electrónico de tipo MIME.
Para crear un mensaje, debe pasar el objeto de sesión al constructor Mimemessage:
MIMEMESSAGE Mensaje = nuevo Mimemessage (sesión);
Nota: Hay otros constructores, como el uso de transmisiones de entrada en formato RFC822 para crear mensajes.
setFrom: configure el remitente del correo electrónico
setRecipient: configure el remitente, la persona CC y la persona secreta del correo electrónico
Los tres tipos de direcciones predefinidas son:
Message.RecipientType.to: destinatario
Message.RecipientType.cc: CC Persona
Message.RecipientType.BCC: Regalos en secreto
setSubject: establezca el tema del correo electrónico
setContent: configure el contenido de correo
SetText: si el contenido de correo electrónico es texto sin formato, puede usar esta interfaz para establecer el contenido de texto.
10. Javax.mail. Address (dirección)
Una vez que haya creado sesión y mensaje y haya completado el mensaje, puede usar la dirección para determinar la dirección de correo. Al igual que el mensaje, la dirección también es una clase abstracta. Estás utilizando la clase Javax.mail.internet.internetaddress.
Si la dirección creada solo contiene una dirección de correo electrónico, simplemente pase la dirección de correo electrónico al constructor.
ejemplo:
Dirección dirección = nueva Internetaddress ("[correo electrónico protegido]");
Autenticador: certificado
Al igual que la clase Java.net, la API de Javamail también puede utilizar autenticador para acceder a los recursos protegidos a través del nombre de usuario y la contraseña. Para la API de Javamail, estos recursos son servidores de correo. Javamail Authenticator está en el paquete Javax.Mail, y es diferente del autenticador de clase con el mismo nombre en Java.net. Los dos no comparten el mismo autenticador porque la API Javamail se usa para Java 1.1, y no tiene la categoría Java.net.
Para usar Authenticator, primero cree una subclase de la clase abstracta y devuelva una instancia de autenticación de contraseña desde el método GetPasswordAuthentication (). Después de completar la creación, debe registrar el autenticador con la sesión. Luego, cuando se requiere autenticación, se notificará el autenticador. Puede aparecer en Windows o leer nombres de usuario y contraseñas de un archivo de configuración (aunque no es seguro no cifrar) y devolverlos al programa de llamadas como objetos de autenticación contraseña.
ejemplo:
Propiedades props = new Properties (); autenticator auth = new Myauthenticator (); sesión Session = Session.getDefaultInstance (Props, Auth);
Ejemplo
Enviar correo de texto
public static void main (string [] args) lanza la excepción {Propiedades prop = new Properties (); prop.setProperty ("mail.debug", "verdadero"); prop.setProperty ("mail.host", mail_server_host); prop.setProperty ("mail.transport.protocol", "smtp"); prop.setProperty ("mail.smtp.auth", "true"); // 1. Crear sesión Session Session = Session.GetInstance (PROP); Transporte TS = NULL; // 2. Obtenga el objeto de transporte a través de la sesión ts = session.getTransport (); // 3. Conéctese al servidor de correo ts.connect (mail_server_host, usuario, contraseña); // 4. Cree un mensaje MIMEMESSAGE Mensaje = new Mimemessage (sesión); // Correo electrónico Message Header Message.setFrom (nuevo Internetaddress (mail_from)); // remitente del mensaje.setRecipient (Message.RecipientType.to, nuevo Internetaddress (mail_to)); // El destinatario del correo electrónico Message.setRecipient (Message.recipientType.cc, new InternetAddress (mail_cc)); // El cc Message.setRecipient (Message.recipientType.bcc, new InternetAddress (mail_bcc)); // El mensaje Mensaje Message.SetSubject ("Test Text Mail"); // El título del correo electrónico // el mensaje Message.setText ("No compartimentado en el mundo"); // 5. Enviar correo ts.sendMessage (Message, Message.getAllRecipients ()); ts.close ();}Enviar correos electrónicos formatados en HTML
public static void main (string [] args) lanza la excepción {Propiedades prop = new Properties (); prop.setProperty ("mail.debug", "verdadero"); prop.setProperty ("mail.host", mail_server_host); prop.setProperty ("mail.transport.protocol", "smtp"); prop.setProperty ("mail.smtp.auth", "true"); // 1. Crear sesión Session Session = Session.GetInstance (PROP); Transporte TS = NULL; // 2. Obtenga el objeto de transporte a través de la sesión ts = session.getTransport (); // 3. Conéctese al servidor de correo ts.connect (mail_server_host, usuario, contraseña); // 4. Cree un mensaje MIMEMESSAGE Mensaje = new Mimemessage (sesión); // Correo electrónico Message Header Message.setFrom (nuevo Internetaddress (mail_from)); // remitente del mensaje.setRecipient (Message.RecipientType.to, nuevo Internetaddress (mail_to)); // El destinatario del correo electrónico Message.setRecipient (Message.recipientType.cc, new InternetAddress (mail_cc)); // El cc Message.setRecipient (Message.recipientType.bcc, new InternetAddress (mail_bcc)); // el destinatario del mensaje de correo electrónico.setsubject ("prueba el correo html"); // El título de la cadena de correo electrónico htmlContent = "<h1> Hola </h1>" + "<p> Mostrar la imagen <img src = 'cid: abc.jpg'> 1.jpg </p>"; MimeBodyPart text = new MimeBodyPart (); text.setContent (htmlContent, "text/html; charset = utf-8"); MimeBodyPart Image = new MimeBodyPart (); Datahandler dh = new Datahandler (new FileDataSource ("d: // [04] temp // img // 1.jpg")); Image.setDatahandler (DH); image.setContentId ("abc.jpg"); // Describe la relación de datos mimemultipart mm = new mimemultipart (); mm.AddBodyPart (texto); Mm.AddBodyPart (imagen); mm.setsubtype ("relacionado"); Message.setContent (mm); Message.SaveChanges (); // 5. Enviar correo ts.sendMessage (Message, Message.getAllRecipients ()); ts.close ();}Enviar correos electrónicos con archivos adjuntos
public static void main (string [] args) lanza la excepción {Propiedades prop = new Properties (); prop.setProperty ("mail.debug", "verdadero"); prop.setProperty ("mail.host", mail_server_host); prop.setProperty ("mail.transport.protocol", "smtp"); prop.setProperty ("mail.smtp.auth", "true"); // 1. Crear sesión Session Session = Session.GetInstance (PROP); Transporte TS = NULL; // 2. Obtenga el objeto de transporte a través de la sesión ts = session.getTransport (); // 3. Conéctese al servidor de correo ts.connect (mail_server_host, usuario, contraseña); // 4. Cree un mensaje MIMEMESSAGE Mensaje = new Mimemessage (sesión); // Correo electrónico Message Header Message.setFrom (nuevo Internetaddress (mail_from)); // remitente del mensaje.setRecipient (Message.RecipientType.to, nuevo Internetaddress (mail_to)); // El destinatario del correo electrónico Message.setRecipient (Message.recipientType.cc, new InternetAddress (mail_cc)); // El cc Message.setRecipient (Message.recipientType.bcc, new InternetAddress (mail_bcc)); // el destinatario del mensaje de correo electrónico.setsubject ("Prueba con correo adjunto"); // El título del correo electrónico mimeBodyPart text = new MimeBodyPart (); text.setContent ("Hay dos archivos adjuntos en el correo electrónico", "Text/html; charset = utf-8"); // Describe la relación de datos mimemultipart mm = new mimemultipart (); mm.setsubtype ("relacionado"); mm.AddBodyPart (texto); String [] archivos = {"d: // [04] temp // img // 1.jpg", "d: // [04] temp // img // 2.jpg"}; // Agregue un archivo adjunto de correo electrónico para (String FileName: archivos) {mimeBodyPart adjectPart = new MimeBodyPart (); AttackPart.attachFile (nombre de archivo); mm.AddBodyPart (adjuntePart); } Message.SetContent (mm); Message.SaveChanges (); // 5. Enviar correo ts.sendMessage (Message, Message.getAllRecipients ()); ts.close ();}Obtenga correos electrónicos en su buzón
Storemail de clase pública {String static final user = "Robot"; // Nombre de usuario Final Static String Password = "Password520"; // contraseña pública pública final static string mail_server_host = "mail. ***. Com"; // Servidor de buzón Public STICT STICT String type_html = "text/html; charset = utf-8"; // Contenido de texto Tipo de contenido público String final static mail_from = "[Correo electrónico protegido]"; // remitente público Final static string mail_to = "[correo electrónico protegido]"; // al destinatario público Final static string mail_cc = "[correo electrónico protegido]"; // cc Person Public Final Static String mail_bcc = "[Correo electrónico protegido]"; // Envía secretamente el público void público void (String [] args) arroja excepción {// Crear un objeto Propiedades con información de conexión específica Propiedades prop = new Properties (); prop.setProperty ("mail.debug", "verdadero"); prop.setProperty ("mail.store.protocol", "pop3"); prop.setProperty ("mail.pop3.host", mail_server_host); // 1. Crear sesión Session Session Session = Session.GetInstance (PROP); // 2. Obtenga el objeto de la tienda a través de Session Store Store = session.getstore (); // 3. Conéctese a la tienda del servidor de correo. // 4. Obtenga la carpeta de correo en la carpeta de buzón = store.getfolder ("bandeja de entrada"); carpeta.open (carpeta.read_only); // Obtener todos los mensajes en el mensaje de objetos de mensaje de carpeta [] mensajes = carpeta.getMessages (); for (int i = 0; i <messages.length; i ++) {string stem = mensajes [i] .getSubject (); Cadena de = (mensajes [i] .getFrom () [0]). ToString (); System.out.println ("th" + (i + 1) + "El tema del mensaje:" + sujeto); System.out.println ("th" + (i + 1) + "la dirección del remitente del correo electrónico:" + desde); } // 5. Cerrar carpeta.close (falso); store.close (); }}Reenviar correo electrónico
Ejemplo: obtenga el primer correo electrónico en la carpeta de correo especificada y reenvíelo
public static void main (string [] args) lanza la excepción {Propiedades prop = new Properties (); prop.put ("mail.store.protocol", "pop3"); prop.put ("mail.pop3.host", mail_server_host); prop.put ("mail.pop3.starttls.enable", "verdadero"); prop.put ("mail.smtp.auth", "verdadero"); prop.put ("mail.smtp.host", mail_server_host); // 1. Crear sesión Session Session = Session.GetDefaultInstance (PROP); // 2. Lea la tienda de la carpeta de correo de la tienda = session.getStore ("Pop3"); store.connect (mail_server_host, usuario, contraseña); Carpeta de carpeta = store.getfolder ("bandeja de entrada"); carpeta.open (carpeta.read_only); // Obtenga el primer mensaje de correo electrónico en el mensaje de la carpeta de correo [] mensajes = carpeta.getMessages (); if (mensajes.length <= 0) {return; } Mensaje mensaje = mensajes [0]; // Imprimir cadena de mensaje clave de = Internetaddress.ToString (Message.getFrom ()); if (de! = null) {system.out.println ("from:" + from); } Cadena Respuesta = Internetaddress.ToString (Message.getRepreplyTo ()); if (Respuesta! = NULL) {System.out.println ("Respuesta a:" + Respuesta); } Cadena a = Internetaddress.ToString (Message.getRecipients (Message.RecipientType.to)); if (to! = null) {system.out.println ("a:" + to); } String stem = message.getSubject (); if (sujeto! = null) {System.out.println ("Sujeto:" + Sujeto); } Fecha enviada = mensaje.getSentDate (); if (enviado! = null) {system.out.println ("enviado:" + enviado); } // Establecer el mensaje del encabezado del mensaje de correo electrónico reenviado hacia adelante = new Mimemessage (sesión); hacia adelante.setFrom (nuevo Internetaddress (mail_from)); Forward.setRecipient (Message.RecipientType.to, nuevo Internetaddress (mail_to)); Forward.setsubject ("Fwd:" + Message.getSubject ()); // Establecer contenido de correo electrónico MimeBodyPart BodyPart = new MimeBodyPart (); BodyPart.SetContent (mensaje, "Mensaje/RFC822"); Multipart multipart = new mimemultipart (); multipart.addbodypart (Bodypart); hacia adelante.setContent (multipart); hacia adelante.savechanges (); Transporte ts = session.getTransport ("SMTP"); ts.connect (usuario, contraseña); ts.sendMessage (hacia adelante, hacia adelante.getAllRecipients ()); carpeta.close (falso); store.close (); ts.close (); System.out.println ("Mensaje reenviado correctamente ...");}Lo anterior se trata de este artículo. Espero que sea útil para todos aprender a enviar y recibir correos electrónicos de Javamail.