devstory

Le Tutoriel de Spring Email

  1. Vue d'ensemble sur Spring Mail
  2. Remarque pour Gmail
  3. Configurer Spring Mail
  4. Exemple d'envoie d'un courrier simple
  5. Envoyer un courrier attaché avec des fichiers
  6. Envoyer un courrier du format  HTML

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 :
  • org.springframework.mail.MailSender
  • org.springframework.mail.SimpleMailMessage
  • org.springframework.mail.MailMessage
  • org.springframework.mail.javamail.JavaMailSender
  • org.springframework.mail.javamail.JavaMailSenderImpl
  • org.springframework.mail.javamail.MimeMessagePreparator
  • org.springframework.mail.javamail.MimeMessageHelper
  • 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 = "yourEmail@gmail.com";

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

    // And receiver!
    public static final String FRIEND_EMAIL = "yourFriend@gmail.com";

}

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!";
    }

}

Tutoriels Spring Boot

Show More