English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Envío de correo electrónico de Servlet

使用 Servlet 发送一封电子邮件是很简单的,但首先您必须在您的计算机上安装 JavaMail API y Java Activation Framework)JAF)

  • 您可以从 Java 网站下载最新版本的 JavaMail,打开网页右侧有个 Downloads 链接,点击它下载。

  • 您可以从 Java 网站下载最新版本的 JAF (versión) 1.1.1)

你也可以使用本站提供的下载链接:

Descargue y descomprima estos archivos, y en el directorio superior recién creado, encontrará algunos archivos jar de estas aplicaciones. Necesita agregar mail.jar y activation.jar los archivos se agreguen a su CLASSPATH.

Enviar un correo electrónico simple

El siguiente ejemplo enviará un correo electrónico simple desde su computadora. Supongamos que suHost localConectado a Internet y compatible con el envío de correos electrónicos. Asegúrese de que todos los archivos jar del paquete Java Email API y JAF estén disponibles en el CLASSPATH.

// Nombre del archivo SendEmail.java
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
 
public class SendEmail extends HttpServlet{
    
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
            lanza ServletException, IOException
  {
      // ID de correo electrónico del destinatario
      String to = "[email protected]";
 
      // ID de correo electrónico del remitente
      String from = "[email protected]";
 
      // Supongamos que está enviando un correo electrónico desde el host local
      String host = "localhost";
 
      // Obtener las propiedades del sistema
      Properties properties = System.getProperties();
 
      // Configurar el servidor de correo
      properties.setProperty("mail.smtp.host", host);
 
      // Obtener el objeto Session por defecto
      Session session = Session.getDefaultInstance(properties);
      
      // Configurar el tipo de contenido de la respuesta
      response.setContentType("text/html;charset=UTF-8");
      PrintWriter out = response.getWriter();
      try{
         // Crear un objeto MimeMessage predeterminado
         MimeMessage message = new MimeMessage(session);
         // Configurar el campo de encabezado From: del encabezado.
         message.setFrom(new InternetAddress(from));
         // Configurar el campo de encabezado To: del encabezado.
         message.addRecipient(Message.RecipientType.TO,
                                  new InternetAddress(to));
         // Configurar el campo de encabezado Subject:
         message.setSubject("This is the Subject Line!");
         // Ahora configuramos el mensaje real
         message.setText("This is actual message");
         // Enviar mensaje
         Transport.send(message);
         String title = "Enviar correo electrónico";
         String res = "Mensaje enviado con éxito...";
         String docType = "<!DOCTYPE html> \n";
         out.println(docType +
         "<html>\n" +
         "<head><title>" + title + "</title></head>\n" +
         "<body bgcolor="#f0f0f0">\n" +
         "<h1 align="center">" + title + "</h1>\n" +
         "<p align="center">" + res + "</p>\n" +
         "</body></html>");
      }catch (MessagingException mex) {
         mex.printStackTrace();
      }
   }
}

Ahora, compilamos el Servlet anterior y creamos la siguiente entrada en el archivo web.xml:

....
 <servlet>
     <servlet-name>SendEmail</servlet-name>
     <servlet-class>SendEmail</servlet-class>
 </servlet>
 
 <servlet-mapping>
     <servlet-name>SendEmail</servlet-name>
     <url-pattern>/SendEmail</url-pattern>
 </servlet-mapping>
....

Ahora, acceda a la URL http://localhost:8080/Llame a este Servlet mediante SendEmail. Esto enviará un correo electrónico al ID de correo electrónico dado [email protected]y se mostrará la respuesta siguiente:

Enviar correo electrónico

Mensaje enviado con éxito...

Si desea enviar un correo electrónico a varios destinatarios, utilice el siguiente método para especificar varios ID de correo electrónico:

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

A continuación, se describe los parámetros:

  • type:Esto se establecerá como TO, CC o BCC. Aquí, CC representa copia y BCC representa copia oculta. Por ejemplo Message.RecipientType.TO

  • addresses:Este es un array de ID de correo electrónico. Cuando se especifica un ID de correo electrónico, se debe utilizar el método InternetAddress().

Enviar un correo electrónico en formato HTML

El siguiente ejemplo enviará un correo electrónico en formato HTML desde su computadora. Supongamos que suHost localConectado a Internet y compatible con el envío de correos electrónicos. Asegúrese de que todos los archivos jar del paquete Java Email API y JAF estén disponibles en el CLASSPATH.

Este ejemplo es muy similar al anterior, pero aquí utilizamos el método setContent() para establecer el segundo parámetro como "text"/El contenido de "html", este parámetro se utiliza para especificar que el contenido HTML está incluido en el mensaje.

Con este ejemplo, puede enviar contenido HTML sin límite de tamaño.

// Nombre del archivo SendEmail.java
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
 
public class SendEmail extends HttpServlet{
    
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
            lanza ServletException, IOException
  {
      // ID de correo electrónico del destinatario
      String to = "[email protected]";
 
      // ID de correo electrónico del remitente
      String from = "[email protected]";
 
      // Supongamos que está enviando un correo electrónico desde el host local
      String host = "localhost";
 
      // Obtener las propiedades del sistema
      Properties properties = System.getProperties();
 
      // Configurar el servidor de correo
      properties.setProperty("mail.smtp.host", host);
 
      // Obtener el objeto Session por defecto
      Session session = Session.getDefaultInstance(properties);
      
      // Configurar el tipo de contenido de la respuesta
      response.setContentType("text/html;charset=UTF-8");
      PrintWriter out = response.getWriter();
      try{
         // Crear un objeto MimeMessage predeterminado
         MimeMessage message = new MimeMessage(session);
         // Configurar el campo de encabezado From: del encabezado.
         message.setFrom(new InternetAddress(from));
         // Configurar el campo de encabezado To: del encabezado.
         message.addRecipient(Message.RecipientType.TO,
                                  new InternetAddress(to));
         // Configurar el campo de encabezado Subject:
         message.setSubject("This is the Subject Line!");
         // Establecer el mensaje HTML real, sin límite en el tamaño del contenido
         message.setContent("<h1>Este es el mensaje real</h1>
                            "text/html" );
         // Enviar mensaje
         Transport.send(message);
         String title = "Enviar correo electrónico";
         String res = "Mensaje enviado con éxito...";
         String docType = "<!DOCTYPE html> \n";
         out.println(docType +
         "<html>\n" +
         "<head><title>" + title + "</title></head>\n" +
         "<body bgcolor="#f0f0f0">\n" +
         "<h1 align="center">" + title + "</h1>\n" +
         "<p align="center">" + res + "</p>\n" +
         "</body></html>");
      }catch (MessagingException mex) {
         mex.printStackTrace();
      }
   }
}

Compile y ejecute el Servlet superior para enviar un mensaje HTML a la dirección de correo electrónico especificada.

Enviar archivos adjuntos en un correo electrónico

El siguiente ejemplo enviará un correo electrónico con adjunto desde su computadora. Supongamos queHost localConectado a Internet y compatible con el envío de correos electrónicos. Asegúrese de que todos los archivos jar del paquete Java Email API y JAF estén disponibles en el CLASSPATH.

// Nombre del archivo SendEmail.java
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
 
public class SendEmail extends HttpServlet{
    
  public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
            lanza ServletException, IOException
  {
      // ID de correo electrónico del destinatario
      String to = "[email protected]";
 
      // ID de correo electrónico del remitente
      String from = "[email protected]";
 
      // Supongamos que está enviando un correo electrónico desde el host local
      String host = "localhost";
 
      // Obtener las propiedades del sistema
      Properties properties = System.getProperties();
 
      // Configurar el servidor de correo
      properties.setProperty("mail.smtp.host", host);
 
      // Obtener el objeto Session por defecto
      Session session = Session.getDefaultInstance(properties);
      
      // Configurar el tipo de contenido de la respuesta
      response.setContentType("text/html;charset=UTF-8");
      PrintWriter out = response.getWriter();
       try{
         // Crear un objeto MimeMessage predeterminado
         MimeMessage message = new MimeMessage(session);
 
         // Configurar el campo de encabezado From: del encabezado.
         message.setFrom(new InternetAddress(from));
 
         // Configurar el campo de encabezado To: del encabezado.
         message.addRecipient(Message.RecipientType.TO,
                                  new InternetAddress(to));
 
         // Configurar el campo de encabezado Subject:
         message.setSubject("This is the Subject Line!");
 
         // Crear la parte del mensaje 
         BodyPart messageBodyPart = new MimeBodyPart();
 
         // Llenar el mensaje
         messageBodyPart.setText("This is message body");
         
         // Crear un mensaje de múltiples partes
         Multipart multipart = new MimeMultipart();
 
         // Configurar la parte del mensaje de texto
         multipart.addBodyPart(messageBodyPart);
 
         // La segunda parte es el adjunto
         messageBodyPart = new MimeBodyPart();
         String filename = "file.txt";
         DataSource source = new FileDataSource(filename);
         messageBodyPart.setDataHandler(new DataHandler(source));
         messageBodyPart.setFileName(filename);
         multipart.addBodyPart(messageBodyPart);
 
         // Enviar la parte completa del mensaje
         message.setContent(multipart );
 
         // Enviar mensaje
         Transport.send(message);
         String title = "Enviar correo electrónico";
         String res = "Correo electrónico enviado con éxito...";
         String docType = "<!DOCTYPE html> \n";
         out.println(docType +
         "<html>\n" +
         "<head><title>" + title + "</title></head>\n" +
         "<body bgcolor="#f0f0f0">\n" +
         "<h1 align="center">" + title + "</h1>\n" +
         "<p align="center">" + res + "</p>\n" +
         "</body></html>");
      }catch (MessagingException mex) {
         mex.printStackTrace();
      }
   }
}

Compile y ejecute el Servlet superior para enviar un mensaje con archivo adjunto al ID de correo electrónico dado.

Parte de autenticación de usuario

Si necesita proporcionar al servidor de correo electrónico el ID de usuario y la contraseña para la autenticación, puede configurar las siguientes propiedades:

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

El resto del mecanismo de envío de correo electrónico es el mismo que el explicado anteriormente.