betacode

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

View more Tutorials:

Следуйте за нами на нашей фан-странице, чтобы получать уведомления каждый раз, когда появляются новые статьи. Facebook

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 = "yourEmail@gmail.com";

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

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

}

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:

Maybe you are interested

Это онлайн курс вне вебсайта o7planning, который мы представляем, он включает бесплатные курсы или курсы со скидкой.