Java Mail es una herramienta que utiliza cuentas de correo electrónico existentes para enviar correos electrónicos. Por ejemplo, registro una cuenta de correo electrónico con NetEase. A través del control de Java Mail, no puedo iniciar sesión en el buzón NetEase en persona, para que el programa pueda usar automáticamente el buzón NetEase para enviar correos electrónicos. Este mecanismo se usa ampliamente en la activación de registro y el envío de spam.
El proceso general de enviar correo Java es el siguiente:
1. Construya una clase específica heredada de javax.mail.authenticator, y anule el método GetPasswordAuthentication () en el interior. Esta clase se utiliza como verificación de inicio de sesión para asegurarse de que tiene derecho a enviar correos electrónicos a este buzón.
2. Cree un archivo de propiedades, que almacena parámetros, como la dirección del servidor SMTP.
3. Cree un javax.mail.session a través del archivo de propiedades construidas y la clase de concreto javax.mail.authenticator. La creación de una sesión es equivalente a iniciar sesión en la dirección de correo electrónico. El resto es naturalmente un nuevo correo electrónico.
4. Para construir el contenido del correo electrónico, generalmente es un objeto Javax.mail.Internet.Mimemessage, y especifique el remitente, el destinatario, el sujeto, el contenido, etc.
5. Use la clase de herramientas Javax.Mail.Transport para enviar correos electrónicos.
A continuación se muestra el código que encapsulé, y los comentarios también son bastante detallados.
1. Primero, es una clase específica heredada de javax.mail.authenticator. El método GetPasswlayauthentication () es construir un objeto de autenticación contraseña y devolverlo, lo cual es un poco confuso para comprender las intenciones de diseño de Java Mail. Puede ser que javax.mail.authenticator nos proporcione medidas de verificación adicionales para garantizar la seguridad.
paquete com.mzule.simplemail; import javax.mail.authenticator; import javax.mail.passwordAuthentication; /** * Verificación de inicio de sesión de buzón del servidor * * @author mzule * */public class MailAuthenticator extiende Authenticator {/** * UserName (BAIL BAILBOJO) */String private String UserName; / *** contraseña*/ contraseña de cadena privada; / *** Inicializar el buzón y la contraseña** @param UserName Builbox* @param contraseña contraseña*/ public mailAuthenticator (String UserName, String Password) {this.Username = username; this.password = contraseña; } String getPassword () {return Password; } @Override PassionAuthentation GetPasswordAuthentication () {return New PasswordAuthentication (nombre de usuario, contraseña); } String getUsername () {return UserName; } public void setPassword (String Password) {this.password = contraseña; } public void setUsername (String UserName) {this.Username = username; }}2. Clase de envío de correo electrónico , los pasos restantes se implementan en esta clase. SimpleMail en el código es un POJO que encapsula el tema y el contenido del correo electrónico. Siento que no es apropiado incluir tanto el tema como el contenido en un parámetro de método, por lo que sobrecargué este método. Además, debido a que las direcciones del servidor SMTP de la mayoría de los buzones se pueden calcular mediante direcciones de correo electrónico. Para simplificar, se proporciona un constructor que no requiere una dirección de servidor SMTP.
paquete com.mzule.simplemail; import java.util.list; import java.util.properties; import javax.mail.MessagingException; import javax.mail.session; import javax.mail.transport; import javax.mail.internet.addressException; import javax.mail.internet.internetaddress; import javax.mail.mimemessage; import javax.mail.internetet.mimessage /*** Simple remitente de correo, se puede enviar en una sola o masa. * * @author mzule * */public class SimpleMailSender {/** * Archivo de propios para enviar correo */Propiedades transitorias finales privadas props = system.getProperties (); / *** Verificación de inicio de sesión del servidor de correo*/ Private Transitor MailAuthenticator Authenticator; / ** * Sesión de correo electrónico */ Sesión de sesión transitoria privada; / ** * Inicialice el remitente de correo * * @param SmtphostName * Smtp Mail Server Dirección * @param UserName * UserName (dirección) para enviar correo * @param contraseña * contraseña para enviar correo electrónico */ public simpleMailsender (cadena final SmtphostName, String Final String UserN de userNe, contraseña de cadena final) {UserName, contraseña, contraseña, contraseña, smtphameName); } /*** Inicialice el remitente de correo electrónico** @param UserName* UserName (dirección) del correo electrónico enviando correos electrónicos y use esto para resolver la dirección del servidor SMTP* @param contraseña* contraseña para enviar correos electrónicos* /public simpleMailSender (nombre de usuario final de cadena final, nombre de userne de cadena final) {// resolver el servidor SMTP a través de la dirección de correo electrónico para la mayoría de los buzón de ciclos finales de cadena final Smtname Smtp). + username.split ("@") [1]; init (nombre de usuario, contraseña, smtphostName); } / ** * Inicialización * * @param UserName * UserName (dirección) para enviar el correo electrónico * @param contraseña * contraseña * @param smtphostName * Smtp Dirección de host * / private void init (cadena de usuario userno, string contraseña, cadena smtphostName) {// inicializar props props.put ("mail.smtp.auth", "verdadero"); props.put ("mail.smtp.host", smtphostName); // verificar autenticador = nuevo MailAuthenticator (nombre de usuario, contraseña); // crear sesión session = session.getInstance (props, autenticator); } / ** * Enviar correo electrónico * * @Param Dirección de correo electrónico del destinatario * @Param Asunto * Correo electrónico Asunto * @Param Contenido * Correo electrónico Contenido * @throws DirectionException * @throws MessagingException * / public void send (string daynepient, string asunto, contenido de objeto) lanza direccionarException, messageException {// Crea Mime Tipo de tipo Mime Mail MimemaMessage = Nuevo Mimesge (sessage);; // establecer mensaje del remitente.setFrom (nuevo Internetaddress (autenticator.getUsername ())); // Establecer el destinatario Message.setRecipient (destinatario de titeo.to, nuevo Internetaddress (destinatario)); // establecer el tema Message.setSubject (asunto); // Establecer el mensaje Content Message.setContent (content.toString (), "Text/html; charset = utf-8"); // enviar transport.send (mensaje); } / ** * Correo electrónico a granel * * @param destinatarios * destinatarios * @param asunto * asunto * @param content * content * @throws direccionalexception * @throws messagingException * / public void send (list <String> destinatario, string asunto, contenido de objeto) lanza direccionarException, messagingException {// Crea Mime Tipo de mime correo final MimemaMessage = nuevo Mimesgege (sessage); // Establecer el mensaje Message.setFrom (nuevo InternetAddress (Authenticator.getUsername ())); // Establecer el destinatario final int num = destinats.size (); Internetaddress [] direcciones = new InternetAddress [num]; for (int i = 0; i <num; i ++) {direcciones [i] = new InternetAddress (destinatario.get (i)); } Message.setRecipients (destinatario type.to, direcciones); // Establecer el tema Message.setSubject (sujeto); // Establecer el contenido de correo Message.setContent (content.toString (), "Text/html; charset = utf-8"); // enviar transport.send (mensaje); } / ** * Enviar correo electrónico * * @Param Dirección de correo electrónico del destinatario * @param Mail * Mail Object * @throws DirectionException * @throws MessageGingException * / public void send (string destinator, simpleMail mail) lanza DirectionException, MessageException {send (destinatario, mail.getSubject (), mail.getContentent ()); } / ** * Correo electrónico a granel * * @param destinatarios * destinatarios * @param correo * objeto de correo * @throws directionException * @throws MessageGingException * / public void Enviar (List <String> destinatario, SimpleMail Mail) lanza DirectionException, MessionGingException {Enviar (destinatario, mail.getSubject (), mail.getContentent ()); }}3. Llamar al remitente del buzón anterior puede construir una clase de fábrica . La clase de fábrica puede encapsular el proceso de creación, por lo que se vuelve muy conveniente obtener el nombre de usuario del buzón leyendo el archivo de configuración. El siguiente código se escribió cuando escribía el modo Observador, y solo demostró brevemente la clase de fábrica.
paquete com.mzule.dp.observer.factory; import com.mzule.dp.observer.constant.mailsenderType; import com.mzule.simplemail.simplemailsender; /*** Factory de boxes** @author mzule**/public class MailsenderFactory {/*** Service Builbox*/private static simpleMailsender Servicesms = null; / *** Obtener buzón** @param Tipo de buzón Tipo* @return Builbox que coincide con el tipo*/ public static simplemailsender getSender (mailsenderType type) {if (type == mailsenderType.service) {if (ServicesMsMs == null) {ServicesMs = new SimpleMailSender ("invisible @126.com", "Hidden");;; ";"); } return Servicesms; } return null; }}4. Envíe el correo electrónico o el código en la demostración del modo Observador, Huh.
paquete com.mzule.dp.observer.observer; import java.util.arrayList; import java.util.list; import java.util.observable; import java.util.observable; import java.util.observable; import java.util.observer; import javax.mail.messagingException; import javax.mail.internet.addressexception; com.mzule.dp.observer.constant.mailsenderType; import com.mzule.dp.observer.factory.mailsenderfactory; import com.mzule.dp.observer.po.product; import Com.mzule.simplemail.simplemailsender; PRODUCT PRODUCT PRODUCTOBSERVER Public Class implementa Observer {@Override public void Update (Obj, Obj, Object Arg) {Product Product = NULL; if (obj instancia de producto) {producto = (producto) obj; } if (arg instanciaf float) {float precio = (float) arg; Flotante disminuir = producto.getPrice () - precio; if (disminuir> 0) {// Enviar correo electrónico SimpleMailSender sms = mailsenderFactory .getSender (mailsenderType.service); List <String> destinates = new ArrayList <String> (); destinates.add ("[email protected]"); destinatarios.add ("[email protected]"); Pruebe {for (String Dincient: destinatarios) {sms.send (destinatario, "cambio de precio", "artículos a los que presta atención a" + producto.getName () + "El precio se ha reducido, de" + producto.getPrice () + "yuan a" + precio + "yuan, el decline alcanzado" + disminución + "yuan rmb. taller rápidamente"); ");"); ");"); "); }} Catch (DirectionException e) {E.PrintStackTrace (); } catch (MessionGingException e) {E.PrintStackTrace (); }}}}} 5. Compruebe si el correo electrónico se ha enviado con éxito.
Lo anterior es todo el proceso de enviar correos electrónicos de Java, y espero que sea útil para el aprendizaje de todos.