search
HomeJavajavaTutorialDetailed explanation of integrated mail service in SpringBoot (with code)

This article brings you a detailed explanation of the integrated mail service in SpringBoot (with code). It has certain reference value. Friends in need can refer to it. I hope it will be helpful to you.

1. Foreword

The core of Spring Email abstraction is the MailSender interface. The implementation of MailSender can send emails to the mail server, and the mail server implements the mail sending function.

Detailed explanation of integrated mail service in SpringBoot (with code)

Spring comes with a MailSender implementation, JavaMailSenderImpl, which uses the JavaMail API to send emails. Before a Spring or SpringBoot application can send Email, we must assemble JavaMailSenderImpl as a bean in the Spring application context.

2. Configuration

1. pom.xml

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

2. application.yml

spring:
  mail:
    host: smtp.163.com
    port: 25
    username: 159****2662@163.com
    password: ***********

The host property defaults to the host of the JavaMail session ; The port port defaults to listening to the standard SMTP port 25; if the mail server requires authentication, username and password also need to be set.

Here I am using the 163 mail server. I need to enable the client authorization password in the 163 mailbox, otherwise a 550 authentication error will be reported.

Detailed explanation of integrated mail service in SpringBoot (with code)

3. EmailConfig.java

Here, we assemble JavaMailSenderImpl as a Bean of the Spring application context. At the same time, it should be noted that the @ConfigurationProperties annotation is used here. This annotation requires the property to have a setter method and the @EnableConfigurationProperties annotation is used in the startup class to make it effective.

@Configuration
@ConfigurationProperties(prefix = "spring.mail")
public class EmailConfig {
    private String host;
    private Integer port;
    private String username;
    private String password;
    @Bean
    public MailSender javaMailSender() {
        JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
        javaMailSender.setHost(host);
        javaMailSender.setPort(port);
        javaMailSender.setUsername(username);
        javaMailSender.setPassword(password);
        return javaMailSender;
    }
    public void setHost(String host) {
        this.host = host;
    }
    public void setPort(Integer port) {
        this.port = port;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public void setPassword(String password) {
        this.password = password;
    }
}

3. Sending

With javaMailSender, sending emails is a simple matter. We only need to inject the javaMailSender Bean into our own implementation class, and then use the JavaMail API to send Email.

1. Sending text emails

public void sendSimpleEmail() {
    // 构造Email消息
    SimpleMailMessage message = new SimpleMailMessage();
    message.setFrom("159****2662@163.com");
    message.setTo("****@qianxx.com");
    message.setSubject("邮件主题");
    message.setText("邮件内容");
    javaMailSender.send(message);
}

Plain text Email lies in constructing a SimpleMailMessage instance. This object can easily send Email messages.

2. Sending attachment emails

Spring’s Email function is not limited to plain text Email. We can also add attachments. If you want to send an email with an attachment, the key trick is to create Multipart type message————Email consists of multiple parts, one part is the Email body, and the other parts are attachments. To send multipart type of Email, you need to create a MIME (Multipurpose Internet Mail Extensions) message.

public void mimeEmail() throws MessagingException {
    // MimeMessage 本身的 API 有些笨重,我们可以使用 MimeMessageHelper
    MimeMessage mimeMessage = javaMailSender.createMimeMessage();
    // 第二个参数是 true ,表明这个消息是 multipart类型的/
    MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
    mimeMessageHelper.setFrom("159****2662@163.com");
    mimeMessageHelper.setTo("****@qianxx.com");
    mimeMessageHelper.setSubject("附件邮件主题");
    mimeMessageHelper.setText("附件邮件内容");
    //添加附件,第一个参数表示添加到 Email 中附件的名称,第二个参数是图片资源
    mimeMessageHelper.addAttachment("boot.png", new ClassPathResource("public/images/boot.png"));
    javaMailSender.send(mimeMessage);
}

3. Send rich text emails

In addition to adding attachments, Spring's Email function can even use HTML to beautify the content of the message body. Sending rich text emails vs. sending simple text emails Email is not much different, the key is to set the message text of the setText() method to HTML, and set the second parameter to true, indicating that this is HTML of rich text.

public void htmlEmail() throws MessagingException {
    MimeMessage mimeMessage = javaMailSender.createMimeMessage();
    MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
    mimeMessageHelper.setFrom("159****2662@163.com");
    mimeMessageHelper.setTo("****@qianxx.com");
    mimeMessageHelper.setSubject("富文本邮件主题");
    String html = "<html><body><h4 id="Hello-SpringBoot">Hello,SpringBoot</h4><img  src=&#39;cid:boot&#39; / alt="Detailed explanation of integrated mail service in SpringBoot (with code)" ></body></html>";
    mimeMessageHelper.setText(html, true);
    // 设置内嵌元素 cid,第一个参数表示内联图片的标识符,第二个参数标识资源引用
    mimeMessageHelper.addInline("boot", new ClassPathResource("public/images/boot.png"));
    javaMailSender.send(mimeMessage);
}

4. Conclusion

String splicing of HTML tags is a very tricky thing. Because it's difficult to parse HTML tags in your mind and imagine what it will look like when rendered. Mixing HTML with Java code further complicates the problem.

So the solution given by Spring is to use templates to generate emails. There are a variety of template solutions to choose from, including Apache Velocity and Thymeleaf. (Since I am not very good at these two template syntaxes, I won’t introduce them in detail).

Demo source code: https://github.com/JMCuixy/Boot

The above is the detailed content of Detailed explanation of integrated mail service in SpringBoot (with code). For more information, please follow other related articles on the PHP Chinese website!

Statement
This article is reproduced at:博客园. If there is any infringement, please contact admin@php.cn delete
How do I use Maven or Gradle for advanced Java project management, build automation, and dependency resolution?How do I use Maven or Gradle for advanced Java project management, build automation, and dependency resolution?Mar 17, 2025 pm 05:46 PM

The article discusses using Maven and Gradle for Java project management, build automation, and dependency resolution, comparing their approaches and optimization strategies.

How do I create and use custom Java libraries (JAR files) with proper versioning and dependency management?How do I create and use custom Java libraries (JAR files) with proper versioning and dependency management?Mar 17, 2025 pm 05:45 PM

The article discusses creating and using custom Java libraries (JAR files) with proper versioning and dependency management, using tools like Maven and Gradle.

How do I implement multi-level caching in Java applications using libraries like Caffeine or Guava Cache?How do I implement multi-level caching in Java applications using libraries like Caffeine or Guava Cache?Mar 17, 2025 pm 05:44 PM

The article discusses implementing multi-level caching in Java using Caffeine and Guava Cache to enhance application performance. It covers setup, integration, and performance benefits, along with configuration and eviction policy management best pra

How can I use JPA (Java Persistence API) for object-relational mapping with advanced features like caching and lazy loading?How can I use JPA (Java Persistence API) for object-relational mapping with advanced features like caching and lazy loading?Mar 17, 2025 pm 05:43 PM

The article discusses using JPA for object-relational mapping with advanced features like caching and lazy loading. It covers setup, entity mapping, and best practices for optimizing performance while highlighting potential pitfalls.[159 characters]

How does Java's classloading mechanism work, including different classloaders and their delegation models?How does Java's classloading mechanism work, including different classloaders and their delegation models?Mar 17, 2025 pm 05:35 PM

Java's classloading involves loading, linking, and initializing classes using a hierarchical system with Bootstrap, Extension, and Application classloaders. The parent delegation model ensures core classes are loaded first, affecting custom class loa

See all articles

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

AI Hentai Generator

AI Hentai Generator

Generate AI Hentai for free.

Hot Article

R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Best Graphic Settings
4 weeks agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. How to Fix Audio if You Can't Hear Anyone
1 months agoBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat Commands and How to Use Them
1 months agoBy尊渡假赌尊渡假赌尊渡假赌

Hot Tools

WebStorm Mac version

WebStorm Mac version

Useful JavaScript development tools

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Integrate Eclipse with SAP NetWeaver application server.

VSCode Windows 64-bit Download

VSCode Windows 64-bit Download

A free and powerful IDE editor launched by Microsoft

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Atom editor mac version download

Atom editor mac version download

The most popular open source editor