Le Tutoriel de Spring Email

View more Tutorials:

1- Vue d'ensemble sur Spring Mail

Spring Framework vous donne un  API pour envoyer un mail. Il comprend certaines interfaces et classes. Elles sont trouvées dans deux packages  org.springframework.mail & org.springframework.mail.javamail.
Afin d'utiliser le  Spring Mail dans l'application  Spring Boot, ajoutez les dépendances ci-dessous au   pom.xml :
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
        http://maven.apache.org/xsd/maven-4.0.0.xsd">
        
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.o7planning</groupId>
    <artifactId>SpringBootMail</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>SpringBootMail</name>
    <description>Spring Boot + Mail</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.0.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>
Le  Spring Mail contient quelques classes (ou des interfaces). À la base, ci-dessous la liste des classes et des interfaces principales :
  1. org.springframework.mail.MailSender
  2. org.springframework.mail.SimpleMailMessage
  3. org.springframework.mail.MailMessage
  4. org.springframework.mail.javamail.JavaMailSender
  5. org.springframework.mail.javamail.JavaMailSenderImpl
  6. org.springframework.mail.javamail.MimeMessagePreparator
  7. org.springframework.mail.javamail.MimeMessageHelper
  8. org.springframework.mail.javamail.MimeMailMessage

MIME (Multi-Purpose Internet Mail Extensions):

MIME (Multi-Purpose Internet Mail Extensions): (Extensions multifonctions du courrier Internet) une extension du courrier Internet initial. Ellepermet d'envoyer les courriers attachés à différents types de données sur Internet tels que audio, video, image,.., et soutient les courrier au format HTML.
Class / Interface Description
MailSender Ceci est une interface de haut niveau (top-level), qui fournit des fonctions pour envoyer un courrier simple.
JavaMailSender C'est la sous-interface (subinterface) de MailSender, qui soutient des messages de type MIME. Elle est habituellement utilisée avec la classe MimeMessageHelper pour créer MimeMessage. Un conseil est d'utiliser l'interface MimeMessagePreparator avec cette interface.
JavaMailSenderImpl Est une classe qui implémente l'interface JavaMailSender. Elle aide à envoyer MimeMessage et SimpleMailMessage.
MailMessage Est une interface qui représente pour un message simple. Elle comprend des informations basiques d'un courrier tels que l'expéditeur, le destinataire, l'objet (subject) et le contenu du message.
SimpleMailMessage Ceci est une classe qui implémente (implements) l'interface MailMessage, sert à créer un message simple.
MimeMailMessage Ceci est une classe qui implémente (implements) l'interface  MailMessage, sert à créer un message soutenant MIME.
MimeMessagePreparator Cette interface fournit la méthode callback qui sera appelée lors de la préparation un message MIME.
MimeMessageHelper Est une classe à créer un message MIME, elle soutient des images et des fichiers attachés et elle crée des message du type HTML.

2- Remarque pour Gmail

Dans cette leçon, je vais utiliser un compte Gmail pour envoyer un message, car Gmail est un Mail-Server courant. Toutefois, pour que votre compte Gmail puisse envoyer un courrier via une application Java, vous devez demander à Google de l'autoriser. OK, tout d'abord, sur le navigateur, vous vous connectez à votre compte Gmail, puis accédez à l'adresse suivante :
Activez cette option pour autoriser l'utilisation de votre compte Gmail par des applications moins sécurisées (Less Secure Apps).

3- Configurer Spring Mail

Dans l'application  Spring, vous devez créer un  Spring-Bean pour  MailSender. Par exemple, ci-dessous, j'utilise un compte de  Gmail pour envoyer un courrier.
MailConfig.java
package org.o7planning.sbmail.config;

import java.util.Properties;

import org.o7planning.sbmail.MyConstants;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;

@Configuration
public class MailConfig {

    @Bean
    public JavaMailSender getJavaMailSender() {
        JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
        mailSender.setHost("smtp.gmail.com");
        mailSender.setPort(587);

        mailSender.setUsername(MyConstants.MY_EMAIL);
        mailSender.setPassword(MyConstants.MY_PASSWORD);

        Properties props = mailSender.getJavaMailProperties();
        props.put("mail.transport.protocol", "smtp");
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.debug", "true");

        return mailSender;
    }

}
MyConstants.java
package org.o7planning.sbmail;

public class MyConstants {

    // Replace with your email here:  
    public static final String MY_EMAIL = "[email protected]";

    // Replace password!!
    public static final String MY_PASSWORD = "yourPassword";

    // And receiver!
    public static final String FRIEND_EMAIL = "[email protected]";

}

4- Exemple d'envoie d'un courrier simple

Ceci est un exemple très simple, l'envoi d'un courrier avec du contenu texte ordinaire.
SimpleEmailExampleController.java
package org.o7planning.sbmail.controller;

import org.o7planning.sbmail.MyConstants;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class SimpleEmailExampleController {

    @Autowired
    public JavaMailSender emailSender;

    @ResponseBody
    @RequestMapping("/sendSimpleEmail")
    public String sendSimpleEmail() {

        // Create a Simple MailMessage.
        SimpleMailMessage message = new SimpleMailMessage();
        
        message.setTo(MyConstants.FRIEND_EMAIL);
        message.setSubject("Test Simple Email");
        message.setText("Hello, Im testing Simple Email");

        // Send Message!
        this.emailSender.send(message);

        return "Email Sent!";
    }

}

5- Envoyer un courrier attaché avec des fichiers

AttachmentEmailExampleController.java
package org.o7planning.sbmail.controller;

import java.io.File;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;

import org.o7planning.sbmail.MyConstants;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class AttachmentEmailExampleController {

    @Autowired
    public JavaMailSender emailSender;

    @ResponseBody
    @RequestMapping("/sendAttachmentEmail")
    public String sendAttachmentEmail() throws MessagingException {

        MimeMessage message = emailSender.createMimeMessage();

        boolean multipart = true;

        MimeMessageHelper helper = new MimeMessageHelper(message, multipart);

        helper.setTo(MyConstants.FRIEND_EMAIL);
        helper.setSubject("Test email with attachments");
        
        helper.setText("Hello, Im testing email with attachments!");
        
        String path1 = "/home/tran/Downloads/test.txt";
        String path2 = "/home/tran/Downloads/readme.zip";

        // Attachment 1
        FileSystemResource file1 = new FileSystemResource(new File(path1));
        helper.addAttachment("Txt file", file1);

        // Attachment 2
        FileSystemResource file2 = new FileSystemResource(new File(path2));
        helper.addAttachment("Readme", file2);

        emailSender.send(message);

        return "Email Sent!";
    }

}

6- Envoyer un courrier du format  HTML

HtmlEmailExampleController.java
package org.o7planning.sbmail.controller;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;

import org.o7planning.sbmail.MyConstants;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class HtmlEmailExampleController {

    @Autowired
    public JavaMailSender emailSender;

    @ResponseBody
    @RequestMapping("/sendHtmlEmail")
    public String sendHtmlEmail() throws MessagingException {

        MimeMessage message = emailSender.createMimeMessage();

        boolean multipart = true;
        
        MimeMessageHelper helper = new MimeMessageHelper(message, multipart, "utf-8");
        
        String htmlMsg = "<h3>Im testing send a HTML email</h3>"
                +"<img src='http://www.apache.org/images/asf_logo_wide.gif'>";
        
        message.setContent(htmlMsg, "text/html");
        
        helper.setTo(MyConstants.FRIEND_EMAIL);
        
        helper.setSubject("Test send HTML email");
        
    
        this.emailSender.send(message);

        return "Email Sent!";
    }

}

View more Tutorials: