devstory

Le Tutoriel de Spring Email

View more Tutorials:

Suivez-nous sur notre fanpage pour recevoir des notifications chaque fois qu'il y a de nouveaux articles. Facebook

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 / InterfaceDescription
MailSenderCeci est une interface de haut niveau (top-level), qui fournit des fonctions pour envoyer un courrier simple.
JavaMailSenderC'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.
JavaMailSenderImplEst une classe qui implémente l'interface JavaMailSender. Elle aide à envoyer MimeMessage et SimpleMailMessage.
MailMessageEst 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.
SimpleMailMessageCeci est une classe qui implémente (implements) l'interface MailMessage, sert à créer un message simple.
MimeMailMessageCeci est une classe qui implémente (implements) l'interface  MailMessage, sert à créer un message soutenant MIME.
MimeMessagePreparatorCette interface fournit la méthode callback qui sera appelée lors de la préparation un message MIME.
MimeMessageHelperEst 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!";
    }

}

View more Tutorials:

Peut-être que vous êtes intéressé

Voici des leçons en ligne à part du site web o7planning que nous recommandons. La liste comprend des leçons en ligne et celles en promo.