La API de Javamail usa la clase Javax.Mail.Message para representar un mensaje. La clase de mensaje es una clase abstracta, por lo que necesitamos usar su subclase javax.mail.internet.mimemessage clase para crear un objeto de instancia de la clase de mensaje. Si creamos un mensaje de texto simple, la clase Mimemessage puede satisfacer nuestras necesidades. Sin embargo, si necesitamos crear un correo electrónico complejo que contenga recursos o archivos adjuntos integrados, necesitamos usar clases como Mimemessage, javax.mail.internet.MimeBodyPart y javax.mail.internet.mimemultipart en Javamail API.
1. La clase de Mimemessage representa todo el correo electrónico
2. La clase MimeBodyPart representa un mensaje MIME del correo electrónico
3. La clase Mimemultipart representa un mensaje MIME combinado compuesto de múltiples mensajes MIME.
La relación de trabajo de estas tres clases se muestra en la figura a continuación:
Aunque los desarrolladores de aplicaciones generalmente solo necesitan usar las tres clases principales: Mimemessage, MimeBodyPart y Mimemultipart Al crear contenido de correo electrónico con Javamailapi, también es necesario comprender su relación de herencia de clase. La siguiente figura enumera las relaciones de herencia y los métodos comunes de estas tres clases.
A continuación, use la clase javax.mail.internet.mimemessage para crear un mensaje de texto simple.
import java.util.date; import java.util.properties; import javax.mail.message; import javax.mail.session; import javax.mail.internet.internetAddress; import javax.mail.internet.mimemessage; import java.iO.fileOutSteam; args) lanza la excepción {String from = "[email protected]"; Cadena a = "[email protected]"; String SUMPLAY = "Test"; String body = "test !!!"; // Crear sesión Session Object Session Session = Session.getDefaultInstance (New Properties ()); // Crear objeto de instancia mimemessage mimemessage msg = new mimemessage (sesión); // Establecer el remitente msg.setFrom (nuevo Internetaddress (desde)); // establecer el destinatario msg.setRecipients (Message.recipientType.to, Internetaddress.parse (a)); // establecer la fecha de envío msg.setsentDate (nueva fecha ()); // Establecer el correo electrónico Msg.SetSubject (asunto); // Establecer el cuerpo de correo electrónico del contenido de texto sin formato msg.settext (cuerpo); // Guardar y generar el contenido final del correo electrónico msg.savechanges (); // Escriba el contenido del objeto Mimemessage al archivo msg.writeTo (nuevo FileOutputStream ("c: //test.eml")); }}Utilizamos el cliente de correo electrónico (usando Foxmail aquí) para abrir el archivo test.eml en la unidad C, y puede ver la siguiente información, indicando que nuestro correo electrónico se creó con éxito.
Aquí hay una breve explicación de algunas de las clases que aparecen arriba
1. Clase de Mimemessage: la anterior introducida que Mimemessage es una clase de implementación concreta de la clase de mensaje, que se utiliza para crear un objeto de instancia de la clase de mensaje. Aquí el constructor pasa un objeto de sesión como parámetro;
2. Clase de sesión: este objeto se utiliza para recopilar información de conexión de red entre el cliente y el servidor de correo y definir la información del entorno requerida para definir todo el programa de correo. Esta información se almacena en el objeto de sesión como los atributos del objeto de sesión. El objeto de sesión utiliza el objeto java.util.properties para obtener el servidor de correo, el nombre de usuario, la información de contraseña y la información compartida que toda la aplicación debe usar. Dado que el constructor de la clase de sesión es privado, utilizamos el método de fábrica estática de getDefaultInstance () proporcionado por la clase de sesión para obtener un objeto de sesión predeterminado;
3. Clase de propiedades: esta clase representa un conjunto de propiedades persistentes, que se utiliza para almacenar la información del par de valor clave como parámetros para crear un objeto de sesión. Aquí se construye un conjunto vacío como un parámetro;
4. Clase de Internetaddress: esta clase es una subclase de la clase de dirección de clase abstracta, utilizada para crear una dirección de correo electrónico;
5. Clase de Type de receptor: esta clase es una clase interna de la clase de mensaje. Esta clase tiene 3 variables estáticas. Para representar al destinatario, CC representa al remitente CC (el destinatario conoce el remitente CC), y BCC representa al remitente secreto del remitente (el destinatario no conoce al remitente secreto del remitente).
El correo electrónico anterior solo contiene texto simple. A veces necesitamos usar archivos HTML para enriquecer nuestro cuerpo de correo electrónico, como usar etiquetas HTML para escribir el cuerpo de correo electrónico y usar etiquetas HTML para introducir algunas imágenes o sonidos en el cuerpo de correo electrónico. El siguiente código crea un correo electrónico que contiene formato HTML
import java.util.date; import java.util.properties; import javax.mail.message; import javax.mail.session; import javax.mail.internet.internetAddress; import javax.mail.internet.mimemessag Main (String [] args) lanza la excepción {String from = "[email protected]"; Cadena a = "[email protected]"; String SUMPLAY = "Test"; String body = "<h4> Bienvenido a leer este correo electrónico </h4>"; // Crear sesión Session Object Session Session = Session.getDefaultInstance (New Properties ()); // Crear objeto de instancia mimemessage mimemessage msg = new mimemessage (sesión); // Establecer el remitente msg.setFrom (nuevo Internetaddress (desde)); // establecer el destinatario msg.setRecipients (Message.recipientType.to, Internetaddress.parse (a)); // establecer la fecha de envío msg.setsentDate (nueva fecha ()); // establece el asunto de correo msg.setsubject (sujeto); // Establezca el cuerpo de correo electrónico de formato HTML msg.setContent (cuerpo, "Text/html; charset = GB2312"); // Guardar y generar el contenido de correo final msg.savechanges (); // Escriba el contenido del objeto Mimemessage al archivo msg.writeTo (nuevo FileOutputStream ("c: //test.eml")); }}Usaremos FoxMail para abrir Test.Eml, y la siguiente pantalla
La diferencia del código anterior es que cuando establecemos el contenido de correo electrónico, usamos el método SetContent en lugar del método SetText, y especificamos el tipo MIME del cuerpo de correo electrónico como Text/HTML.
Ahora hemos aprendido a crear correos electrónicos con etiquetas HTML, pero a veces es posible que necesitemos insertar algunas imágenes en el correo electrónico para expresar nuestro significado de manera más intuitiva. Entonces necesitamos usar la clase Mimemultipart y la clase MimeBodyPart
import java.io.fileOutputStream; import java.util.properties; import javax.activation.datahandler; import javax.activation.fileDataSource; import javax.mail.message; import javax.mail.session; import javax.mail.internet.internetdress; import javax.mail.internet.mimeBodyPart; import javax.mail.internet.mimemessage; import javax.mail.internet.mimemultipart; public class PictureMessage {public static void main (string [] args) Excepción {cadena de = "[email protected]"; // Servidor de la cadena a = "123456". // Dirección del destinatario String String Sujeto = "Correo electrónico HTML"; String body = "<a href = http: //www.cnblogs.com>" + "Bienvenido al jardín de blog </a> </br>" + "<img src =/" c: //dog.jpg/ ">"; Sesión sesión = session.getDefaultInstance (New Properties ()); // Crear un objeto Mimemessage y establecer varios campos de encabezado de mensajes Mimemessage Message = new Mimemessage (sesión); Message.setFrom (nuevo Internetaddress (desde)); Message.setRecipients (Message.RecipientType.to, Internetaddress.parse (a)); Message.setsubject (sujeto); // Crear un objeto Mimemultipart con subtipo "relacionado". Mimemultipart multipart = new mimemultipart ("relacionado"); /** Crear un objeto MimeBodyPart que represente el cuerpo HTML y agréguelo al objeto Mimemultipart creado anteriormente*/ MimeBodyPart htmlBodyPart = new MimeBodyPart (); htmlBodyPart.SetContent (Body, "Text/Html; Charset = GB2312"); multipart.addBodyPart (htmlbodypart); /** Crear un objeto MimeBodyPart que represente el contenido de la imagen y agréguelo al objeto Mimemultipart creado anteriormente*/ MimeBodyPart gifBodyPart = new MimeBodyPart (); FileDataSource fds = new FileDataSource ("c: //dog.jpg"); gifBodyPart.SetFileName (fds.getName ()); gifBodyPart.SetDatahandler (nuevo Datahandler (FDS)); multipart.addBodyPart (gifbodyPart); /** Establezca el objeto Mimemultipart en el contenido de todo el mensaje, preste atención a llamar al método saveChanges para actualizaciones*/ mensaje.setContent (multipart); Message.SaveChanges (); // Escribe el contenido del objeto Mimemessage al archivo Message.WriteTo (nuevo FileOutputStream ("c: //picteRemessage.eml")); }}El código parece un poco complicado. Puede echar un vistazo al diagrama de relaciones del Mimemessage, Mimemultipart y MimeBodyPart mencionado anteriormente. Esto hará que sea más fácil entender el código anterior. Abrimos PictureMessage.Eml y vemos la siguiente información, que muestra que hemos creado con éxito un correo electrónico con una imagen, y la imagen se incluye en el correo electrónico en forma de un archivo adjunto.
Mimemultipart tiene dos constructores.
Public mimemultipart () public mimemultipart (String subtype)
El primero es sin parámetros, y el objeto de instancia predeterminado tiene un tipo MIME mezclado. El segundo formula un tipo para crear un objeto de instancia de la clase Mimemultipart. Hay tres tipos de uso común: mixtos, relacionados y alternativos. La relación combinada de estos tres tipos en MIME es la siguiente:
Ahora usamos la relación de combinación que se muestra arriba para crear un mensaje con un archivo adjunto y un recurso integrado en el cuerpo.
import java.io.fileOutputStream; import java.util.properties; import javax.activation.datahandler; import javax.activation.fileDataSource; import javax.mail.message; import javax.mail.session; import javax.mail.internet.internetdress; import javax.mail.internet.mimeBodyPart; import javax.mail.internet.mimemessage; import javax.mail.internet.mimemultipart; public class ComplexMessage {public static void main (string [] args) Excepción {sesión session = session MIMEMESSAGE Mensaje = CreateMessage (Sesión); Message.WriteTo (nuevo FileOutputStream ("C: //ComplexMessage.eml")); } public static mimemessage createMessage (sesión de sesión) lanza la excepción {String from = "[email protected]"; // Streting Dirección String a = "[email protected]"; // Dirección del destinatario String String Sujeto = "Correo electrónico HTML"; // Correo electrónico SUMPLAY String Body = "<a href = http: //www.cnblogs.com>" + "Bienvenido al parque de blog </a> </br>" + "<img src =/" c: //dog.jpg/ ">"; MIMEMESSAGE Mensaje = nuevo Mimemessage (sesión); Message.setFrom (nuevo Internetaddress (desde)); Message.setRecipients (Message.RecipientType.to, Internetaddress.parse (a)); Message.setsubject (sujeto); // Cree cada objeto MimeBodyPart que representa el cuerpo del mensaje y el archivo adjunto MimeBodyPart ContentPart = CreateContent (Body, "c: //dog.jpg"); // El siguiente archivo adjunto puede ser Video o Audio MimeBodyPart AttachPart1 = CreateAtTachment ("c: //music.mp3"); MimeBodyPart AttachPart2 = createAtTachment ("c: //video.avi"); // Crear un objeto Mimemultipart para combinar el cuerpo del mensaje y el accesorio mimemultipart allmultipart = new mimemultipart ("mixto"); allMultipart.AddBodyPart (ContentPart); allMultipart.AddBodyPart (AttachPart1); allMultipart.AddBodyPart (AttachPart2); // Establezca todo el contenido de correo electrónico en el objeto Mimemultipart combinado final Message.setContent (AllMultIPart); Message.SaveChanges (); Mensaje de devolución; } public static static mimeBodyPart CreateContent (string Body, String FileName) lanza la excepción { /** Crear un objeto Mimemultipart que representa el mensaje MIME combinado, y el objeto MimeBodyPart al que se guarda el objeto Mimemultipart* / MimeBodyPart Content = new MimeBodyPart ();; Mimemultipart contentMultipart = new mimemultipart ("relacionado"); /** Crear un objeto MimeBodyPart para guardar el cuerpo HTML y guárdelo para Mimemultipart*/ mimeBodyPart htmlBodyPart = new MimeBodyPart (); htmlBodyPart.SetContent (Body, "Text/Html; Charset = GB2312"); contentMultipart.AddBodyPart (htmlbodyPart); /** Crear un objeto MimeBodyPart para guardar la imagen y guardarla para Mimemultipart*/ mimeBodyPart gifBodyPart = new MimeBodyPart (); FileDataSource fds = new FileDataSource (nombre de archivo); gifBodyPart.SetDatahandler (nuevo Datahandler (FDS)); contentMultipart.AddBodyPart (gifbodyPart); // Guardar el objeto Mimemultipart en el objeto MimeBodyPart ContentPart.SetContent (ContentMultipart); return contentpart; } public static mimeBodyPart CreateAtTachment (String FileName) lanza la excepción {// Crear un objeto MimeBodyPart que guarde el archivo adjunto y agregue el contenido de archivos adjunto y la información correspondiente mimeBodyPart adjectPart = new MimeBodyPart (); FileDataSource fds = new FileDataSource (nombre de archivo); adjuntingPart.SetDatahandler (nuevo Datahandler (FDS)); adjectPart.SetFileName (fds.getName ()); return adjectPart; }}Abra el archivo ComplexMessage.eml y puede ver el siguiente contenido:
Ahora hemos aprendido cómo crear un correo electrónico de texto sin formato, un correo electrónico con formato HTML y un correo electrónico con imágenes y archivos adjuntos integrados. El próximo artículo presentará cómo enviar correos electrónicos Javamail que se inicia con el tercer artículo Enviar correo electrónico
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.