Envío de correo electrónico a través de Java con autenticación SSL/TLS

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.
 

¿Cómo funciona el correo electrónico?

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *