Home > Java > javaTutorial > body text

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

不言
Release: 2018-10-09 14:25:06
forward
3589 people have browsed it

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>
Copy after login

2. application.yml

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

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;
    }
}
Copy after login

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);
}
Copy after login

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);
}
Copy after login

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>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);
}
Copy after login

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!

Related labels:
source:cnblogs.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template