Spring Boot: envío de correo electrónico a través de SMTP

Spring Boot brinda la capacidad de enviar correos electrónicos a través de SMTP utilizando la biblioteca JavaMail . Aquí ilustraremos pautas paso a paso para desarrollar servicios web Restful que se pueden usar para enviar correos electrónicos con o sin archivos adjuntos. Para comenzar con los pasos, primero creemos un proyecto Spring Boot usando Spring Initializer .

Implementación:

Paso 1: agregar la dependencia spring-boot-starter-mail en pom.xml.

XML

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

Esta dependencia es un iniciador para usar JavaMail y puede considerarse como el soporte de envío de correo electrónico de Spring Framework.

Paso 2: configurar el archivo Application.properties con las configuraciones necesarias para usar el servidor SMTP de Gmail .

spring.mail.host=smtp.gmail.com
spring.mail.port=587
spring.mail.username=<Login User to SMTP server>
spring.mail.password=<Login password to SMTP server>
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true

El ID de Gmail utilizado para iniciar sesión en su cuenta de Gmail se puede proporcionar como nombre de usuario. Para la generación de contraseñas, la verificación en dos pasos debe estar habilitada para su cuenta de la siguiente manera:

Después de eso, AppPassword debe crearse utilizando la siguiente ruta:

Login to Gmail 
    -> Manage your Google Account 
        -> Security 
            -> App Passwords 
                -> Provide your login password 
                    -> Select app with a custom name 
                        -> Click on Generate

Paso 3: crear la clase EmailDetails que contiene campos como destinatario, cuerpo del mensaje, asunto y archivo adjunto.

Java

// Java Program to Illustrate EmailDetails Class
 
package com.SpringBootEmail.Entity;
 
// Importing required classes
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
 
// Annotations
@Data
@AllArgsConstructor
@NoArgsConstructor
 
// Class
public class EmailDetails {
 
    // Class data members
    private String recipient;
    private String msgBody;
    private String subject;
    private String attachment;
}

Paso 4: Creación de la interfaz EmailService e implementación de la clase EmailServiceImpl de la capa de servicio.

La interfaz EmailService define dos métodos:

  1. String sendSimpleMail(EmailDetails detalles): Este método se puede utilizar para enviar un correo electrónico de texto simple al destinatario deseado.
  2. String sendMailWithAttachment(EmailDetails detalles): este método se puede utilizar para enviar un correo electrónico junto con un archivo adjunto al destinatario deseado.

La clase de implementación de interfaz y servicio es como se muestra a continuación en el ejemplo de la siguiente manera: 

Archivo: EmailService.java

Java

// Java Program to Illustrate Creation Of
// Service Interface
 
package com.SpringBootEmail.service;
 
// Importing required classes
import com.SpringBootEmail.Entity.EmailDetails;
 
// Interface
public interface EmailService {
 
    // Method
    // To send a simple email
    String sendSimpleMail(EmailDetails details);
 
    // Method
    // To send an email with attachment
    String sendMailWithAttachment(EmailDetails details);
}

La interfaz JavaMailSender de JavaMail API se utiliza aquí para enviar correos electrónicos de texto simple. 

Para enviar un correo electrónico más sofisticado con un archivo adjunto, se puede usar MimeMessage . MimeMessageHelper funciona como una clase de ayuda para que MimeMessage agregue el archivo adjunto y otros detalles necesarios para enviar el correo.

Archivo: EmailServiceImpl.java

Java

// Java Program to Illustrate Creation Of
// Service implementation class
 
package com.SpringBootEmail.service;
 
// Importing required classes
import com.SpringBootEmail.Entity.EmailDetails;
import java.io.File;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
 
// Annotation
@Service
// Class
// Implementing EmailService interface
public class EmailServiceImpl implements EmailService {
 
    @Autowired private JavaMailSender javaMailSender;
 
    @Value("${spring.mail.username}") private String sender;
 
    // Method 1
    // To send a simple email
    public String sendSimpleMail(EmailDetails details)
    {
 
        // Try block to check for exceptions
        try {
 
            // Creating a simple mail message
            SimpleMailMessage mailMessage
                = new SimpleMailMessage();
 
            // Setting up necessary details
            mailMessage.setFrom(sender);
            mailMessage.setTo(details.getRecipient());
            mailMessage.setText(details.getMsgBody());
            mailMessage.setSubject(details.getSubject());
 
            // Sending the mail
            javaMailSender.send(mailMessage);
            return "Mail Sent Successfully...";
        }
 
        // Catch block to handle the exceptions
        catch (Exception e) {
            return "Error while Sending Mail";
        }
    }
 
    // Method 2
    // To send an email with attachment
    public String
    sendMailWithAttachment(EmailDetails details)
    {
        // Creating a mime message
        MimeMessage mimeMessage
            = javaMailSender.createMimeMessage();
        MimeMessageHelper mimeMessageHelper;
 
        try {
 
            // Setting multipart as true for attachments to
            // be send
            mimeMessageHelper
                = new MimeMessageHelper(mimeMessage, true);
            mimeMessageHelper.setFrom(sender);
            mimeMessageHelper.setTo(details.getRecipient());
            mimeMessageHelper.setText(details.getMsgBody());
            mimeMessageHelper.setSubject(
                details.getSubject());
 
            // Adding the attachment
            FileSystemResource file
                = new FileSystemResource(
                    new File(details.getAttachment()));
 
            mimeMessageHelper.addAttachment(
                file.getFilename(), file);
 
            // Sending the mail
            javaMailSender.send(mimeMessage);
            return "Mail sent Successfully";
        }
 
        // Catch block to handle MessagingException
        catch (MessagingException e) {
 
            // Display message when exception occurred
            return "Error while sending mail!!!";
        }
    }
}

Paso 5: Creación de un Rest Controller EmailController que define varias API para enviar correos electrónicos.

Java

// Java Program to Create Rest Controller that
// Defines various API for Sending Mail
 
package com.SpringBootEmail.controller;
 
// Importing required classes
import com.SpringBootEmail.Entity.EmailDetails;
import com.SpringBootEmail.service.EmailService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
 
// Annotation
@RestController
// Class
public class EmailController {
 
    @Autowired private EmailService emailService;
 
    // Sending a simple Email
    @PostMapping("/sendMail")
    public String
    sendMail(@RequestBody EmailDetails details)
    {
        String status
            = emailService.sendSimpleMail(details);
 
        return status;
    }
 
    // Sending email with attachment
    @PostMapping("/sendMailWithAttachment")
    public String sendMailWithAttachment(
        @RequestBody EmailDetails details)
    {
        String status
            = emailService.sendMailWithAttachment(details);
 
        return status;
    }
}

Paso 6: ejecutar la aplicación Spring Boot y presionar http://localhost:8080/sendMail para enviar un correo electrónico simple

El correo recibido en Gmail es el siguiente:

Paso 7: Ejecute la aplicación Spring Boot y presione http://localhost:8080/sendMailWithAttachment para enviar un correo electrónico junto con un archivo adjunto.

El correo recibido en Gmail es el siguiente:

Publicación traducida automáticamente

Artículo escrito por akankshapatro 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 *