Spring Boot (12): почтовая служба Spring Boot

Spring Boot

Когда мы впервые отправляли электронные письма, мы использовали JavaMail для отправки электронных писем, но в Spring Boot Spring Boot помог нам инкапсулировать JavaMail, который можно использовать напрямую.

1. Зависимость файл POM.XML

Листинг кода: spring-boot-mail/pom.xml***

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-mail</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-thymeleaf</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

  • spring-boot-starter-thymeleaf представляет этот механизм шаблонов, потому что при отправке электронных писем проще использовать HTML в различных форматах, и мы также можем использовать freeMark, Spring Boot также предоставляет нам пакеты зависимостей.

2. Конфигурационный файл application.yml

Список кодов: ***

server:
  port: 8080
spring:
  application:
    name: spring-boot-mail
  mail:
    host: smtp.qq.com
    username: 136736247
    password: xxxxxx
    default-encoding: UTF-8
    fromAddr: 136736247@qq.com
    nickName: inwsy

Здесь я использую почтовый ящик QQ в качестве отправителя электронной почты, в которомpasswordЭто не наш пароль QQ, этот пароль нужно задать нам самим в настройках нашего почтового ящика QQ. Как показано ниже:

один из нихspring.mail.fromAddrа такжеspring.mail.nickNameЭти две конфигурации настраиваются мной, а не официальной конфигурацией, я прочитаю эти два элемента конфигурации в коде позже.

3. Простая отправка электронной почты

3.1 Класс реализации

Листинг кода: spring-boot-mail/src/main/java/com/springboot/springbootmail/service/impl/MailServiceImpl.java***

@Service
public class MailServiceImpl implements MailService {

    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    @Autowired
    private JavaMailSender javaMailSender;

    @Value("${spring.mail.fromAddr}")
    private String from;

    @Value("${spring.mail.nickName}")
    private String nickName;

    @Override
    public void sendSimpleEmail(String to, String subject, String content) {
        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
        simpleMailMessage.setFrom(nickName + "<" + from + ">");
        simpleMailMessage.setTo(to);
        simpleMailMessage.setSubject(subject);
        simpleMailMessage.setText(content);
        
        try{
            javaMailSender.send(simpleMailMessage);
            logger.info("简易邮件发送成功");
        } catch(Exception e) {
            logger.error("简易邮件发送异常", e);
        }

    }
}

3.2 Тестовый класс

Листинг кода: spring-boot-mail/src/test/java/com/springboot/springbootmail/SpringBootMailApplicationTests.java***

@Autowired
MailService mailService;

@Test
public void sendSimpleEmail() {
    mailService.sendSimpleEmail("inwsy@hotmail.com", "测试邮件题目", "测试邮件内容");
}

Это письмо отправлено на мой почтовый ящик Hotmail.

4. Отправляйте электронные письма в формате HTML

4.1 Класс реализации

Листинг кода: spring-boot-mail/src/main/java/com/springboot/springbootmail/service/impl/MailServiceImpl.java***

@Override
public void sendHTMLEmail(String to, String subject, String content) {
    MimeMessage message = javaMailSender.createMimeMessage();

    try {
        MimeMessageHelper messageHelper = new MimeMessageHelper(message, true);

        messageHelper.setFrom(new InternetAddress(from, nickName, "UTF-8"));
        messageHelper.setTo(to);
        messageHelper.setSubject(subject);
        messageHelper.setText(content, true);

        javaMailSender.send(message);
        
        logger.info("HTML 模版邮件发送成功");
    } catch (MessagingException e) {
        logger.error("HTML 模版邮件发送失败", e);
    } catch (UnsupportedEncodingException e) {
        logger.error("收件地址编码异常", e);
    }

}

4.2 Шаблон страницы

Листинг кода: spring-boot-mail/src/main/resources/templates/email.html***

<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="UTF-8"/>
        <title>邮件模版</title>
    </head>
    <body>
        这是邮件模版生成的邮件,可以点击链接查看详情。
        <a href="#" th:href="@{ http://www.geekdigging.com/ }">查看详情。</a>
        当前的Code为:<span th:text="${code}"></span>
    </body>
</html>

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

4.3 Тестовый класс

Листинг кода: spring-boot-mail/src/test/java/com/springboot/springbootmail/SpringBootMailApplicationTests.java***

@Test
public void sendHTMLTemplateMail() {
    Context context = new Context();
    context.setVariable("code", "123456");
    String emailHTMLContent = templateEngine.process("email", context);

    mailService.sendHTMLEmail("inwsy@hotmail.com", "测试 HTML 模版邮件", emailHTMLContent);
}

5. Отправляйте электронные письма с вложениями

5.1 Класс реализации

Листинг кода: spring-boot-mail/src/main/java/com/springboot/springbootmail/service/impl/MailServiceImpl.java***

@Override
public void sendAttachmentsMail(String to, String subject, String content, String fileName, String filePath) {

    MimeMessage message = javaMailSender.createMimeMessage();

    try {
        MimeMessageHelper messageHelper = new MimeMessageHelper(message, true);

        messageHelper.setFrom(new InternetAddress(from, nickName, "UTF-8"));
        messageHelper.setTo(to);
        messageHelper.setSubject(subject);
        messageHelper.setText(content, true);

        FileSystemResource file = new FileSystemResource(new File(filePath));
        messageHelper.addAttachment(fileName, file);

        javaMailSender.send(message);
        
        logger.info("带附件邮件发送成功");
    } catch (MessagingException e) {
        logger.error("带附件邮件发送失败", e);
    } catch (UnsupportedEncodingException e) {
        logger.error("收件地址编码异常", e);
    }
}

Уведомление:Если вам нужно отправить несколько вложений, напишите несколькоmessageHelper.addAttachment(fileName, file);Вот и все.

5.2 Тестовый класс

Листинг кода: spring-boot-mail/src/test/java/com/springboot/springbootmail/SpringBootMailApplicationTests.java***

@Test
public void sendAttachmentsMail() {

    String fileName = "图片.jpg";
    String filePath = "C:\\Users\\inwsy\\Downloads\\0370279582fe3e2a8012060c896a5dd.jpg";

    mailService.sendAttachmentsMail("inwsy@hotmail.com", "测试带附件的邮件", "详细请查阅附件", fileName, filePath);
}

6. Резюме

В реальном процессе разработки сбой при отправке электронных писем является относительно распространенным явлением, например: перегрузка сети, отклонение другой стороной и т. д. Как правило, при разработке системы электронной почты отправляемые данные могут быть записаны в сначала данные и т. д. После завершения отправки измените бит флага и добавьте механизм гарантии, такой как добавление запланированной задачи, и отправьте содержимое, которое не удается отправить, а количество повторных попыток меньше определенного порога в пределах период времени.Если давление почтовой системы слишком велико, вы можете выбрать Использовать асинхронный способ отправки, например, используя очередь сообщений для давления.

7. Пример кода

Пример кода — Гитхаб

Пример кода — Gitee

7. Ссылка

http://www.ityouknow.com/springboot/2017/05/06/spring-boot-mail.html

Если моя статья была вам полезна, отсканируйте код и подпишитесь на официальный аккаунт автора: Получите последние новости о галантерейных товарах :)