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

Java Mail de Spring

El framework Spring proporciona muchas interfaces y clases útiles para enviar y recibir correos electrónicos.

org.springframework.mail El paquete es el paquete raíz que proporciona soporte de correo en el framework Spring.

API de Java Mail de Spring

Las interfaces y clases de Java mail soportadas en el framework Spring son las siguientes:

Interfaz MailSender: Es la interfaz raíz. Proporciona las funciones básicas para enviar correos electrónicos simples. Interfaz JavaMailSender: Es una subinterfaz de MailSender. Soporta mensajes MIME. Principalmente se utiliza con MimeMessageHelper clases para crear JavaMail MimeMessage , así como adjuntos y otros. El framework Spring recomienda su uso con MimeMessagePreparator Mecanismo para utilizar esta interfaz. Clase JavaMailSenderImpl: Proporciona una implementación de la interfaz JavaMailSender. Soporta Mensajes MIME de JavaMail y Mensajes Simples de Spring. Clase SimpleMailMessage: Se utiliza para crear correos electrónicos simples, incluyendo de, a, cc, asunto y texto del correo. Interfaz MimeMessagePreparator: Es una interfaz de callback utilizada para preparar mensajes MIME de JavaMail. Clase MimeMessageHelper: Es una clase ayudante utilizada para crear mensajes MIME. Soporta elementos en línea, como imágenes, adjuntos típicos de correo y contenido de texto HTML.

Ejemplo de envío de correos electrónicos a través del servidor Gmail en Spring

Usando dos clases de correo electrónico de Spring:

SimpleMailMessage Para crear mensajes. JavaMailSenderImpl Para enviar mensajes.

Necesita crear los siguientes archivos para enviar correos electrónicos a través del framework Spring.

MailMail.java applicationContext.xml Test.java Necesita cargar los archivos mail.jar y activation.jar para ejecutar este ejemplo.

Descargue mail.jar y Activation.jar o visite el sitio web de Oracle para descargar la última versión.


1)MailMail.java

Esta es una clase simple que define la propiedad mailSender. En tiempo de ejecución, se proporcionará un objeto MailSender a esta propiedad.

En el método sendMail(), estamos creando una instancia de SimpleMailMessage y almacenando la información (por ejemplo, de, a, asunto y mensaje) en este objeto.

Aquí se utiliza el método send() de la interfaz MailSender para enviar correos electrónicos simples.

paquete com.w3codebox;
import org.springframework.mail.MailSender;
import org.springframework.mail.SimpleMailMessage;
 
public class MailMail{
  private MailSender mailSender;
 
  public void setMailSender(MailSender mailSender) {
    this.mailSender = mailSender;
  }
 
  public void sendMail(String from, String to, String subject, String msg) {
        //creando mensaje
    SimpleMailMessage message = new SimpleMailMessage();
    message.setFrom(from);
    message.setTo(to);
    message.setSubject(subject);
    message.setText(msg);
        //enviando mensaje
    mailSender.send(message); 
  }
}

2)applicationContext.xml

En este archivo xml, creamos un bean para la clase JavaMailSenderImpl. Necesitamos definir los valores de las siguientes propiedades:

Host Nombre de usuario Contraseña javaMailProperties

También utilizaremos la propiedad mailSender para crear un bean para la clase MailMail. Ahora, estableceremos una instancia de JavaMailSenderImpl en la propiedad mailSender de la clase MailMail.

<?xml version="1.0" encoding="UTF-8"?>
<beans
  xmlns="http://www.springframework.org/schema/beans
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
  xmlns:p="http://www.springframework.org/schema/p
  xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
  <property name="host" value="smtp.gmail.com"} />
  <property name="username" value="[email protected]" />
  <property name="password" value="tucontraseñaDeGmail" />
  <property name="javaMailProperties">
     <props>
              <prop key="mail.smtp.auth">true</prop>/prop>
              <prop key="mail.smtp.socketFactory.port">465</prop>
              <prop key="mail.smtp.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop>
              <prop key="mail.smtp.port">465</prop>
        </props>
  </property>
</bean>
<bean id="mailMail" class="com.w3codebox.MailMail">
  <property name="mailSender" ref="mailSender" />
</bean>
</beans>

3)Test.java

Esta clase obtiene el bean mailMail del archivo applicationContext.xml y llama al método sendMail de la clase MailMail.

paquete com.w3codebox;
import org.springframework.beans.factory.*;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.*;
public class Test { 
public static void main(String[] args) {
  
Resource r = new ClassPathResource("applicationContext.xml");
BeanFactory b = new XmlBeanFactory(r);
MailMail m = (MailMail)b.getBean("mailMail");
String remitente = "[email protected]";//escribir aquí el ID de Gmail del remitente
String destinatario = "[email protected]";//escribir aquí el ID del destinatario
m.sendMail(sender,receiver,"hi","bienvenido");
  
System.out.println("éxito");
}
}

Cómo ejecutar este ejemplo

Cargue el archivo jar de spring para core y Java mail Cargue mail.jar y activation.jar Cambie las propiedades de nombre de usuario y contraseña en applicationContext.xml, y especifique su ID de correo electrónico de gmail y contraseña. Cambie el ID de correo electrónico del remitente y el ID de correo electrónico del destinatario en el archivo Test.java. Compile y ejecute la clase Test


Ejemplo de envío de correo en Spring utilizando el servidor proporcionado por el proveedor de hosting

Si tiene su propio sitio, puede usar el servidor de correo. MailMail.java y la clase Test serán las mismas. Solamente necesita cambiar el ID de correo electrónico del remitente en el archivo Test.java. Se necesitarán algunos cambios en applicationContext.xml.

En el archivo applicationContext.xml, estamos utilizando:

mail.unitedsquaad.com como nombre de host. Cambiélo. [email protected] como nombre de usuario. Cambiélo. xxxxx como contraseña. Cambiéla.

<?xml version="1.0" encoding="UTF-8"?>
<beans
  xmlns="http://www.springframework.org/schema/beans
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance
  xmlns:p="http://www.springframework.org/schema/p
  xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
  <property name="host" value="mail.unitedsquaad.com" />
  <property name="username" value="[email protected]" />
  <property name="password" value="xxxxx" />
 
  <property name="javaMailProperties">
     <props>
              <prop key="mail.smtp.auth">true</prop>/prop>
           </props>
  </property>
</bean>
<bean id="mailMail" class="MailMail">
  <property name="mailSender" ref="mailSender" />
</bean>
 
</beans>

enviar correos electrónicos a múltiples destinatarios

Puede enviar correos electrónicos a múltiples destinatarios utilizando la clase SimpleMailMessage. La clase SimpleMailMessage setTo(String [] destinatarios)Este método se utiliza para enviar mensajes a múltiples destinatarios. Vamos a ver un código simple.

      ....
  public void sendMail(String from, String[] to, String subject, String msg) {
        //creando mensaje
    SimpleMailMessage message = new SimpleMailMessage();
    message.setFrom(from);
    message.setTo(to);//pasando un array de destinatarios
    message.setSubject(subject);
    message.setText(msg);
        //enviando mensaje
    mailSender.send(message); 
  }
     ...

Ejemplo de Spring MimeMessagePreparator

Podemos enviar mensajes MIME utilizando la interfaz MimeMessagePreparator. Tiene un método prepare(MimeMessage message).

Vamos a ver un código simple para enviar un mensaje MIME.

  import javax.mail.Message;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessagePreparator;
public class MailMail{
  private JavaMailSender mailSender;
 
  public void setMailSender(JavaMailSender mailSender) {
    this.mailSender = mailSender;
  }
 
  public void sendMail(final String from, final String to, final String subject, final String msg) {
      
    MimeMessagePreparator messagePreparator = new MimeMessagePreparator() {
          
                public void prepare(MimeMessage mimeMessage) throws Exception {
                   mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
                   mimeMessage.setFrom(new InternetAddress(from));
                   mimeMessage.setSubject(subject);
                   mimeMessage.setText(msg);
                }
        };
        mailSender.send(messagePreparator);
  }
}

los archivos applicationContext.xml y Test.java son los mismos que los proporcionados anteriormente.


Enviar adjunto a través de un ejemplo de Spring MimeMessageHelper

Podemos enviar un mensaje MIME con adjunto utilizando la clase MimeMessageHelper de Spring. Se recomienda usar MimeMessagePreparator.

Vamos a ver un código simple para enviar un mensaje MIME con adjunto (imagen).

import java.io.File;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
public class MailMail{
  private JavaMailSender mailSender;
 
  public void setMailSender(JavaMailSender mailSender) {
    this.mailSender = mailSender;
  }
 
  public void sendMail(final String from, final String to, final String subject, final String msg) {
    try{
    MimeMessage message = mailSender.createMimeMessage();
    MimeMessageHelper helper = new MimeMessageHelper(message, true);
    helper.setFrom(from);
    helper.setTo(to);
    helper.setSubject(subject);
    helper.setText(msg);
    // adjuntar el archivo
    FileSystemResource file = new FileSystemResource(new File("c:");/rr.jpg");
    helper.addAttachment("mybrothermage.jpg", file);//una imagen será enviada con este nombre
    mailSender.send(message);
    catch (MessagingException e) { e.printStackTrace(); }
  }
}

los archivos applicationContext.xml y Test.java son los mismos que los proporcionados anteriormente.