Руководство Spring Email
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 так же имеет много классов (или интерфейсов). В основном ниже является список главных классов и интерфейсов:
- 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): (Многоцелевые расширения интернет-почты) расширение начальной интернет-почты. Он позволяет отправлять электронную почту с разными прикрепленными файлами в Интернете как аудио, видео, изображение,.., и поддерживает электронные почты формата 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!";
}
}
Руководства Spring Boot
- Установите Spring Tool Suite для Eclipse
- Руководство Spring для начинающих
- Руководство Spring Boot для начинающих
- Общие свойства Spring Boot
- Руководство Spring Boot и Thymeleaf
- Руководство Spring Boot и FreeMarker
- Руководство Spring Boot и Groovy
- Руководство Spring Boot и Mustache
- Руководство Spring Boot и JSP
- Руководство Spring Boot, Apache Tiles, JSP
- Используйте Logging в Spring Boot
- Мониторинг приложений с помощью Spring Boot Actuator
- Создание веб-приложения с несколькими языками с помощью Spring Boot
- Используйте несколько ViewResolver в Spring Boot
- Используйте Twitter Bootstrap в Spring Boot
- Руководство Spring Boot Interceptor
- Руководство Spring Boot, Spring JDBC и Spring Transaction
- Руководство Spring JDBC
- Руководство Spring Boot, JPA и Spring Transaction
- Руководство Spring Boot и Spring Data JPA
- Руководство Spring Boot, Hibernate и Spring Transaction
- Интеграция Spring Boot, JPA и H2 Database
- Руководство Spring Boot и MongoDB
- Используйте несколько DataSources с Spring Boot и JPA
- Используйте несколько DataSource с Spring Boot и RoutingDataSource
- Создайте приложение для входа с Spring Boot, Spring Security, Spring JDBC
- Создайте приложение для входа с Spring Boot, Spring Security, JPA
- Создайте приложение регистрации пользователей с помощью Spring Boot, Spring Form Validation
- Пример OAuth2 Social Login в Spring Boot.
- Запускать фоновые запланированные задачи в Spring
- Пример CRUD Restful Web Service c Spring Boot
- Пример Spring Boot Restful Client c RestTemplate
- Пример CRUD с Spring Boot, REST и AngularJS
- Защита Spring Boot RESTful Service используя Basic Authentication
- Защита Spring Boot RESTful Service используя Auth0 JWT
- Пример Upload file c Spring Boot
- Пример Download file c Spring Boot
- Пример Upload file c Spring Boot и jQuery Ajax
- Пример Upload file c Spring Boot и AngularJS
- Создание веб-приложения для корзины покупок с помощью Spring Boot, Hibernate
- Руководство Spring Email
- Создайте простое приложение Chat с Spring Boot и Websocket
- Разверните приложение Spring Boot на Tomcat Server
- Развертывание приложения Spring Boot на Oracle WebLogic Server
- Установите бесплатный сертификат Let's Encrypt SSL для Spring Boot
- Настройте Spring Boot для перенаправления HTTP на HTTPS
Show More