La API JavaMail define clases que representan los componentes de un sistema de correo. JavaMail no implementa un servidor de correo electrónico, sino que le permite acceder a un servidor de correo electrónico mediante una API de Java. Para probar el código presentado, debe tener acceso a un servidor de correo electrónico. Si bien la especificación de la API de JavaMail no exige soporte para protocolos específicos, JavaMail normalmente incluye soporte para POP3, IMAP y SMTP.
Requisito previo:
- Tener acceso a un servidor SMTP. Debe conocer el nombre de host, el número de puerto y la configuración de seguridad de su servidor SMTP. Los proveedores de correo web pueden ofrecer acceso SMTP, ver la configuración de su cuenta de correo electrónico o ayudar a encontrar más información. Tenga en cuenta que su nombre de usuario suele ser su dirección de correo electrónico completa y no solo el nombre que aparece antes del símbolo @.
- Un IDE Java EE y servidores de aplicaciones como GlassFish u Oracle WebLogic Server. JavaMail se puede descargar como una biblioteca en una aplicación Java SE, pero este tutorial asume el uso de un servidor de aplicaciones Java EE que ya incluiría JavaMail.
Existen los siguientes tres pasos para enviar correos electrónicos usando JavaMail. Son los siguientes:
Obtener el objeto de la sesión : la clase javax.mail.Session proporciona el objeto de la sesión, el método Session.getDefaultInstance() y el método Session.getInstance().
// Setup mail server properties.setProperty("mail.smtp.host", host); // mail username and password properties.setProperty("mail.user", "user"); properties.setProperty("mail.password", "password$$");
Redactar el mensaje : la clase javax.mail.Transport proporciona un método para enviar el mensaje.
// javax.mail.internet.MimeMessage class is // mostly used for abstraction. MimeMessage message = new MimeMessage(session); // header field of the header. message.setFrom(new InternetAddress(from)); message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); message.setSubject("subject"); message.setText("Hello, aas is sending email ");
Envía el mensaje
Transport.send(message);
A continuación se muestra Enviar correo en Java usando SMTP sin autenticación implementación completa en java-
Java
import java.util.*; import javax.mail.*; import javax.mail.internet.*; import javax.activation.*; public class SendEmail { public static void main(String[] args) { // change below lines accordingly String to = "got@gmail.com"; String from = "akash@gmail.com"; String host = "localhost"; // or IP address // Get the session object // Get system properties Properties properties = System.getProperties(); // Setup mail server properties.setProperty("mail.smtp.host", host); // Get the default Session object Session session = Session.getDefaultInstance(properties); // compose the message try { // javax.mail.internet.MimeMessage class // is mostly used for abstraction. MimeMessage message = new MimeMessage(session); // header field of the header. message.setFrom(new InternetAddress(from)); message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); message.setSubject("subject"); message.setText("Hello, aas is sending email "); // Send message Transport.send(message); System.out.println("Yo it has been sent.."); } catch (MessagingException mex) { mex.printStackTrace(); } } }
Producción
Yo it has been sent...
El programa es simple de entender y funciona bien, pero en la vida real, la mayoría de los servidores SMTP usan algún tipo de autenticación como TLS o SSL. Entonces, ahora veremos cómo crear un objeto de sesión para estos protocolos de autenticación. Para TLS y SSL, puede conocer el puerto en el que se encuentra el servidor de correo que ejecuta esos servicios. Le proporcionaremos un código teniendo en cuenta Gmail. A continuación se muestra Enviar correo en Java usando SMTP con implementación completa de autenticación TLS en Java.
Java
import java.util.*; import javax.mail.*; import javax.mail.internet.*; import javax.activation.*; public class SendMail { public static void main(String[] args) { // change accordingly final String username = "username@gmail.com"; // change accordingly final String password = "password"; // or IP address final String host = "localhost"; // Get system properties Properties props = new Properties(); // enable authentication props.put("mail.smtp.auth", "true"); // enable STARTTLS props.put("mail.smtp.starttls.enable", "true"); // Setup mail server props.put("mail.smtp.host", "smtp.gmail.com"); // TLS Port props.put("mail.smtp.port", "587"); // creating Session instance referenced to // Authenticator object to pass in // Session.getInstance argument Session session = Session.getInstance(props, new javax.mail.Authenticator() { //override the getPasswordAuthentication method protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password); } }); try { // compose the message // javax.mail.internet.MimeMessage class is // mostly used for abstraction. Message message = new MimeMessage(session); // header field of the header. message.setFrom(new InternetAddress("from-email@gmail.com")); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("to-email@gmail.com")); message.setSubject("hello"); message.setText("Yo it has been sent"); Transport.send(message); //send Message System.out.println("Done"); } catch (MessagingException e) { throw new RuntimeException(e); } } }
A continuación se muestra la implementación completa de Enviar correo en Java utilizando SMTP con autenticación SSL en Java.
Java
import java.util.*; import javax.mail.*; import javax.mail.internet.*; import javax.activation.*; public class SendEmail { public static void main(String[] args) { // change accordingly String to = "got@gmail.com"; // change accordingly String from = "akash@gmail.com"; // or IP address String host = "localhost"; // mail id final String username = "username@gmail.com" // correct password for gmail id final String password = "mypassword"; System.out.println("TLSEmail Start"); // Get the session object // Get system properties Properties properties = System.getProperties(); // Setup mail server properties.setProperty("mail.smtp.host", host); // SSL Port properties.put("mail.smtp.port", "465"); // enable authentication properties.put("mail.smtp.auth", "true"); // SSL Factory properties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); // creating Session instance referenced to // Authenticator object to pass in // Session.getInstance argument Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator() { // override the getPasswordAuthentication // method protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("username", "password"); } }); } //compose the message try { // javax.mail.internet.MimeMessage class is mostly // used for abstraction. MimeMessage message = new MimeMessage(session); // header field of the header. message.setFrom(new InternetAddress(from)); message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); message.setSubject("subject"); message.setText("Hello, aas is sending email "); // Send message Transport.send(message); System.out.println("Yo it has been sent.."); } catch (MessagingException mex) { mex.printStackTrace(); } } }
Múltiples clientes podemos tener los siguientes cambios en el código anterior
Java
// This is an array of e-mail ID. You would // need to use InternetAddress() method // while specifying email IDs void addRecipients(Message.RecipientType type, Address[] addresses)
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA