Java: envío de correo electrónico

Enviar un correo electrónico usando su aplicación Java es bastante simple, pero para empezar debe tener JavaMail API y Java Activation Framework (JAF) instalado en su máquina.

Descargue y descomprima estos archivos, en los directorios de nivel superior recién creados encontrará una serie de archivos jar para ambas aplicaciones. Necesitas agregarmail.jar y activation.jar archivos en su CLASSPATH.

Envíe un correo electrónico sencillo

A continuación, se muestra un ejemplo para enviar un correo electrónico simple desde su máquina. Se supone que sulocalhost está conectado a Internet y tiene la capacidad suficiente para enviar un correo electrónico.

Ejemplo

// File Name SendEmail.java

import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

public class SendEmail {

   public static void main(String [] args) {    
      // Recipient's email ID needs to be mentioned.
      String to = "[email protected]";

      // Sender's email ID needs to be mentioned
      String from = "[email protected]";

      // Assuming you are sending email from localhost
      String host = "localhost";

      // 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);

      try {
         // Create a default MimeMessage object.
         MimeMessage message = new MimeMessage(session);

         // Set From: header field of the header.
         message.setFrom(new InternetAddress(from));

         // Set To: header field of the header.
         message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));

         // Set Subject: header field
         message.setSubject("This is the Subject Line!");

         // Now set the actual message
         message.setText("This is actual message");

         // Send message
         Transport.send(message);
         System.out.println("Sent message successfully....");
      } catch (MessagingException mex) {
         mex.printStackTrace();
      }
   }
}

Compile y ejecute este programa para enviar un correo electrónico simple:

Salida

$ java SendEmail
Sent message successfully....

Si desea enviar un correo electrónico a varios destinatarios, se utilizarán los siguientes métodos para especificar varios ID de correo electrónico:

void addRecipients(Message.RecipientType type, Address[] addresses)
   throws MessagingException

Aquí está la descripción de los parámetros:

  • type- Esto se establecería en TO, CC o BCC. Aquí CC representa Carbon Copy y BCC representa Black Carbon Copy. Ejemplo: Message.RecipientType.TO

  • addresses- Este es un conjunto de ID de correo electrónico. Debería utilizar el método InternetAddress () mientras especifica las ID de correo electrónico.

Envíe un correo electrónico HTML

Este es un ejemplo para enviar un correo electrónico HTML desde su máquina. Aquí se supone que sulocalhost está conectado a Internet y tiene la capacidad suficiente para enviar un correo electrónico.

Este ejemplo es muy similar al anterior, excepto que aquí estamos usando el método setContent () para establecer contenido cuyo segundo argumento es "texto / html" para especificar que el contenido HTML está incluido en el mensaje.

Con este ejemplo, puede enviar contenido HTML tan grande como desee.

Ejemplo

// File Name SendHTMLEmail.java

import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

public class SendHTMLEmail {

   public static void main(String [] args) {
      // Recipient's email ID needs to be mentioned.
      String to = "[email protected]";

      // Sender's email ID needs to be mentioned
      String from = "[email protected]";

      // Assuming you are sending email from localhost
      String host = "localhost";

      // 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);

      try {
         // Create a default MimeMessage object.
         MimeMessage message = new MimeMessage(session);

         // Set From: header field of the header.
         message.setFrom(new InternetAddress(from));

         // Set To: header field of the header.
         message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));

         // Set Subject: header field
         message.setSubject("This is the Subject Line!");

         // Send the actual HTML message, as big as you like
         message.setContent("<h1>This is actual message</h1>", "text/html");

         // Send message
         Transport.send(message);
         System.out.println("Sent message successfully....");
      } catch (MessagingException mex) {
         mex.printStackTrace();
      }
   }
}

Compile y ejecute este programa para enviar un correo electrónico HTML -

Salida

$ java SendHTMLEmail
Sent message successfully....

Enviar archivo adjunto por correo electrónico

A continuación, se muestra un ejemplo para enviar un correo electrónico con un archivo adjunto desde su máquina. Aquí se supone que sulocalhost está conectado a Internet y tiene la capacidad suficiente para enviar un correo electrónico.

Ejemplo

// File Name SendFileEmail.java

import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;

public class SendFileEmail {

   public static void main(String [] args) {     
      // Recipient's email ID needs to be mentioned.
      String to = "[email protected]";

      // Sender's email ID needs to be mentioned
      String from = "[email protected]";

      // Assuming you are sending email from localhost
      String host = "localhost";

      // 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);

      try {
         // Create a default MimeMessage object.
         MimeMessage message = new MimeMessage(session);

         // Set From: header field of the header.
         message.setFrom(new InternetAddress(from));

         // Set To: header field of the header.
         message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));

         // Set Subject: header field
         message.setSubject("This is the Subject Line!");

         // Create the message part 
         BodyPart messageBodyPart = new MimeBodyPart();

         // Fill the message
         messageBodyPart.setText("This is message body");
         
         // Create a multipar message
         Multipart multipart = new MimeMultipart();

         // Set text message part
         multipart.addBodyPart(messageBodyPart);

         // Part two is attachment
         messageBodyPart = new MimeBodyPart();
         String filename = "file.txt";
         DataSource source = new FileDataSource(filename);
         messageBodyPart.setDataHandler(new DataHandler(source));
         messageBodyPart.setFileName(filename);
         multipart.addBodyPart(messageBodyPart);

         // Send the complete message parts
         message.setContent(multipart );

         // Send message
         Transport.send(message);
         System.out.println("Sent message successfully....");
      } catch (MessagingException mex) {
         mex.printStackTrace();
      }
   }
}

Compile y ejecute este programa para enviar un correo electrónico HTML -

Salida

$ java SendFileEmail
Sent message successfully....

Parte de autenticación de usuario

Si es necesario proporcionar la ID de usuario y la contraseña al servidor de correo electrónico con fines de autenticación, puede configurar estas propiedades de la siguiente manera:

props.setProperty("mail.user", "myuser");
props.setProperty("mail.password", "mypwd");

El resto del mecanismo de envío de correo electrónico se mantendrá como se explicó anteriormente.