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.
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.
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.
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency>
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.
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; } }
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.
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.
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); }
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='cid:boot' / 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); }
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!