В этой статье в основном представлена отправка почты в Spring Boot, а также объясняется простая текстовая почта, почта в формате HTML, почта с вложениями, почта с изображениями и почта по шаблону.
Быстрая навигация
- Добавить зависимости Maven
- Добавить конфигурацию, связанную с почтовым ящиком, в файл конфигурации
- Сервис, Построение кода тестового проекта
- Пять типов отправки электронной почты
- Сводка проблем
добавить зависимости maven
существуетSpring Boot
Проектpom.xml
импортируется в файлspring-boot-starter-email
полагаться
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-email</artifactId>
<scope>email</scope>
</dependency>
Шаблоны писем должны быть импортированыspring-boot-starter-thymeleaf
плагин
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
Добавить конфигурацию, связанную с почтовым ящиком, в файл конфигурации
163 конфигурации почтового ящика, обратите внимание на замену информации вашей учетной записи, пароль - это код авторизации.
application.yml
spring:
mail:
host: smtp.163.com
username: your163account@163.com
password: your163password
default-encoding: utf-8
Почтовый ящик QQ отправляет конфигурацию почты, следующий пароль является кодом авторизации
spring:
mail:
host: smtp.qq.com
username: yourqqaccount@qq.com
password: yourQQpassword
сборка проекта
На основе модульного теста в предыдущем разделеchapter5-1Написано на основе примеров кода
код бизнес-уровня
Создайте в сервисной директории файл MailService.java, отвечающий за написание функции отправки почты бизнес-уровня
Давайте воспользуемся преимуществами SpringJavaMailSender
В интерфейсе реализована отправка почты, которая используется локально в проекте@Autowired
Внедрить объект отправки почты
MailService.java
package com.angelo.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;
@Service
public class MailService {
@Value("${spring.mail.username}")
private String from;
@Autowired // 项目启动时将mailSender注入
private JavaMailSender javaMailSender;
// ... 下面会一一介绍 ...
}
код модульного теста
Создал в тестовом каталогеMailServiceTest.java
Тестовый класс для модульного тестирования кода бизнес-уровня
MailServiceTest.java
package com.angelo.service;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
import javax.annotation.Resource;
import javax.mail.MessagingException;
import java.lang.reflect.Array;
import static org.junit.Assert.*;
@RunWith(SpringRunner.class)
@SpringBootTest
public class MailServiceTest {
@Autowired
private MailService mailService;
@Resource
TemplateEngine templateEngine;
String to = "your163password@163.com";
// ... 下面为一一介绍 ...
}
Пять типов отправки электронной почты
текстовое письмо
SimpleMailMessage
Он инкапсулирует функции отправки и получения простых электронных писем, а также функцию мониторинга модулей исключений.Это также самый простой тип отправки электронной почты.Создайте объект сообщения электронной почты и установите отправителя, объект отправки, тему сообщения и содержимое сообщения электронной почты. Эл. адрес.
- Бизнес-уровень
MailService.java
/**
* 发送文本邮件
* @param to
* @param subject
* @param content
*/
public void sendTextMail(String to, String subject, String content) {
SimpleMailMessage message = new SimpleMailMessage();
message.setTo(to); // 发送对象
message.setSubject(subject); // 邮件主题
message.setText(content); // 邮件内容
message.setFrom(from); // 邮件的发起者
javaMailSender.send(message);
}
Модульное тестирование приведенного выше бизнес-кода, чтобы увидеть эффект
- модульный тестовый слой
MailServiceTest.java
@Test
public void sendTextEmailTest() {
mailService.sendTextMail(to, "发送文本邮件", "hello,这是Spring Boot发送的一封文本邮件!");
}
- Результаты теста
HTML-почта
на основеMimeMessageHelper
Создайтеhelper
Object, установив для второго параметра setText значение true, будет использовать формат html для печати почты.
- Бизнес-уровень
MailService.java
/**
* 发送HTMl邮件
* @param to
* @param subject
* @param content
* @throws MessagingException
*/
public void sendHtmlMail(String to, String subject, String content) throws MessagingException {
MimeMessage message = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(from);
helper.setTo(to);
helper.setSubject(subject);
helper.setText(content, true);
javaMailSender.send(message);
}
- модульный тестовый слой
MailServiceTest.java
@Test
public void sendHtmlEmailTest() throws MessagingException {
String content = "<html>" +
"<body>" +
"<h1 style=\"" + "color:red;" + "\">hello,这是Spring Boot发送的一封HTML邮件</h1>" +
"</body></html>";
mailService.sendHtmlMail(to, "发送HTML邮件", content);
}
- Результаты теста
Вы можете видеть, что результат электронной почты использует предварительно установленный формат электронной почты в примере.
электронная почта вложения
- Бизнес-уровень
MailService.java
/**
* 发送带附件的邮件
* @param to
* @param subject
* @param content
* @param filePathList
* @throws MessagingException
*/
public void sendAttachmentMail(String to, String subject, String content, String[] filePathList) throws MessagingException {
MimeMessage message = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(from);
helper.setTo(to);
helper.setSubject(subject);
helper.setText(content, true);
for (String filePath: filePathList) {
System.out.println(filePath);
FileSystemResource fileSystemResource = new FileSystemResource(new File(filePath));
String fileName = fileSystemResource.getFilename();
helper.addAttachment(fileName, fileSystemResource);
}
javaMailSender.send(message);
}
filePathList
Напишите путь к файлу вложения в формате массива.
- модульный тестовый слой
MailServiceTest.java
@Test
public void sendAttachmentEmailTest() throws MessagingException {
String[] filePathList = new String[2];
filePathList[0] = "/SpringBoot-WebApi/chapter4.zip";
filePathList[1] = "/SpringBoot-WebApi/chapter5.zip";
mailService.sendAttachmentMail(to, "发送附件邮件", "hello,这是Spring Boot发送的一封附件邮件!", filePathList);
}
- Результаты теста
электронная почта со встроенным изображением в формате html
Он также отправляется на основе html-почты, и вы можете напрямую просматривать изображения через статические ресурсы, такие как встроенные изображения.
- Бизнес-уровень
MailService.java
/**
* 发送html内嵌图片的邮件
* @param to
* @param subject
* @param content
* @param srcPath
* @param srcId
* @throws MessagingException
*/
public void sendHtmlInlinePhotoMail(String to, String subject, String content, String srcPath, String srcId) throws MessagingException {
MimeMessage message = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(from);
helper.setTo(to);
helper.setSubject(subject);
helper.setText(content, true);
FileSystemResource fileSystemResource = new FileSystemResource(new File(srcPath));
helper.addInline(srcId, fileSystemResource);
javaMailSender.send(message);
}
В следующем модульном тесте srcPath — это ваш локальный путь к изображению, а srcId должен быть таким же, как у бизнес-уровня выше.helper.addInline(srcId, fileSystemResource)
srcId остается прежним.
- модульный тестовый слой
MailServiceTest.java
@Test
public void sendHtmlInlinePhotoMailTest() throws MessagingException {
String srcPath = "/SpringBoot-WebApi/chapter6/img/pic18.jpg";
String srcId = "pic18";
String content = "<html>" +
"<body>" +
"<h2>hello,这是Spring Boot发送的一封HTML内嵌图片的邮件</h2>" +
"<img src=\'cid:"+ srcId +"\'></img>" +
"</body></html>";
mailService.sendHtmlInlinePhotoMail(to, "发送图片邮件", content, srcPath, srcId);
}
- Результаты теста
шаблон письма
Когда содержание электронной почты относительно простое, мы можем использовать вышеуказанные простые методы отправки электронной почты.В сложном бизнесе нам нужно использовать структуру HTML, а данные в HTML необходимо динамически изменять.Или выбрать шаблон электронная почта, вы можете использовать
Freemarker
,thymeleaf
и другие механизмы шаблонов, здесь мы в основном вводим использованиеthymeleaf
.
- Написание шаблона электронной почты
resources/templates
новый каталогemailTemplate.html
документ
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>模板邮件</title>
</head>
<body>
您好,<span th:text="${username}"></span>,欢迎访问我的个人博客:
<a href="https://github.com/Q-Angelo/summarize">Github</a>、
<a th:href="@{https://www.imooc.com/u/{id}(id=${id})}" href="#">慕课网</a>
</body>
</html>
Просто используйте вышеупомянутую отправку электронной почты в формате html и добавьте метод в файл модульного теста для тестирования.
- модульный тестовый слой
MailServiceTest.java
@Test
public void testTemplateEmailTest() throws MessagingException {
Context context = new Context();
context.setVariable("username", "张三");
context.setVariable("id", "2667395");
String emailContent = templateEngine.process("emailTemplate", context);
mailService.sendHtmlMail(to, "发送模板邮件", emailContent);
}
- Результаты теста
Общая проблема
Причина этой ошибки в том, что NetEase расценивает отправленное мной электронное письмо как спам, > Это заголовок электронного письма, которое я заполнил, и позже я обнаружил, что NetEase включил заголовок в заголовок.163
В результате, если вы столкнетесь с похожими проблемами, пожалуйста, проверьте больше.
com.sun.mail.smtp.SMTPSendFailedException: 554 DT:SPM 163 smtp10,DsCowADH1MxWegtcyxFjDw--.48939S2 1544256086
Если у вас есть какие-либо вопросы, пожалуйста, задайте их в разделе комментариев ниже
Посмотреть полный пример этой статьи на Github, глава 6-1.
Автор: май июнь
Ссылка на сайт:Вухуу. ИМО OC.com/article/267…
Источник: МООК
Github: Боевая серия Spring Boot