Руководство Spring Email

View more Tutorials:

1- Обзор Spring Mail

Spring Framework предоставляет вам API чтобы отправлять email, который включает некоторые интерфейсы и классы, все лежит в 2 пакетах  org.springframework.mail & org.springframework.mail.javamail.
Чтобы использовать  Spring Mail в приложении  Spring Boot, добавьте следующие зависимые в  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>
Spring Mail так же имеет много классов (или интерфейсов). В основном ниже является список главных классов и интерфейсов:
  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): (Многоцелевые расширения интернет-почты) расширение начальной интернет-почты. Он позволяет отправлять электронную почту с разными прикрепленными файлами в Интернете как  аудио , видео, изображение,.., и поддерживает электронные почты формата  HTML.
Класс/Интерфейс Описание
MailSender Это интерфейс на наивысшем уровне (top-level), он предоставляет функции для отправление простой электронной почты.
JavaMailSender Это подинтерфейс (subinterface) у MailSender, он поддерживает сообщения вида MIME, он обычно используется с классом MimeMessageHelper чтобы создать MimeMessage. Рекомендуется использовать интерфейс MimeMessagePreparator cс этим интерфейсом.
JavaMailSenderImpl Это класс выполняющий интерфейс JavaMailSender. Он поддерживает сообщения MimeMessage и SimpleMailMessage.
MailMessage Это интерфейс представляющий просто сообщение (message). Он включает базовую информацию электронной почты как отправитель, получатель, тема (subject) и содержание сообщения.
SimpleMailMessage Это класс выполняющий (implements) интерфейс MailMessage, используется для создания простого сообщения (message).
MimeMailMessage Это класс выполняющий интерфейс MailMessage, используется для создания сообщения поддерживающего MIME.
MimeMessagePreparator Этот интерфейс предоставляет метод callback который вызывается при подготовлении сообщения MIME.
MimeMessageHelper Это поддерживающий класс для создания сообщения MIME, он поддерживает изображения, и прикрепленные файлы, так же создает сообщения вида HTML.

2- Примечание для Gmail

В данной статье я буду использовать аккаунт  Gmail для отправления сообщений, так как  Gmail это распространенный  Mail-Server. Но чтобы ваш аккаунт  Gmail мог отправлять почту через Java приложение, вы говорите  Google, что вы разрешаете это. OK, для начала на браузере вам нужно войти в свой аккаунт  Gmail, потом пройти по ссылке ниже:
Активироать для разрешения вашего аккаунта  Gmail быть использованным менее защищенными приложениями (Less Secure Apps).

3- Конфигурировать Spring Mail

В приложении  Spring, вам стоит создать  Spring-Bean для  MailSender. Например ниже я использую аккаунт  Gmail для отправления почты.
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- Пример простого отправления почты (Email)

Это очень простой пример, отправление почты с обычным содержанием текста.
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- Отправить почту (Email) с прикрепленными файлами

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- Отправить почту (email) формата 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: