Continuation from【WEEK15】 【DAY1】Asynchronous Tasks【English Version】
Contents
- 17. Asynchronous, Timed, and Email Tasks
- 17.2. Email Tasks
- 17.2.1. Email sending is also very common in our daily development, and Springboot provides support for this as well.
- 17.2.2. Add spring-boot-starter-mail dependency
- 17.2.3. View the auto-configuration class MailSenderAutoConfiguration.class
- 17.2.4. Modify application.properties
- 17.2.4.1. Get authorization code
- 17.2.5. Unit Testing
- 17.2.5.1. Modify Springboot09TestApplicationTests.java
- 17.2.5.2. Run the project
- 17.2.6. Modify Springboot09TestApplicationTests.java to send a relatively complex email
- 17.2.7. Encapsulation (Complete code of Springboot09TestApplicationTests.java)
2024.6.4 Tuesday
17. Asynchronous, Timed, and Email Tasks
17.2. Email Tasks
17.2.1. Email sending is also very common in our daily development, and Springboot provides support for this as well.
- Email sending requires introducing spring-boot-starter-mail
- SpringBoot automatically configures MailSenderAutoConfiguration
- Define MailProperties content and configure it in application.yml
- Auto-configure JavaMailSender
- Test email sending
17.2.2. Add spring-boot-starter-mail dependency
<!--Email Tasks-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId>
</dependency>
17.2.3. View the auto-configuration class MailSenderAutoConfiguration.class
This class does not register a bean. Open MailSenderJndiConfiguration.class to see
View the configuration file MailProperties.class
/** Copyright 2012-2021 the original author or authors.** Licensed under the Apache License, Version 2.0 (the "License");* you may not use this file except in compliance with the License.* You may obtain a copy of the License at** https://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an "AS IS" BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*/package org.springframework.boot.autoconfigure.mail;import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;import org.springframework.boot.context.properties.ConfigurationProperties;/*** Configuration properties for email support.** @author Oliver Gierke* @author Stephane Nicoll* @author Eddú Meléndez* @since 1.2.0*/
@ConfigurationProperties(prefix = "spring.mail")
public class MailProperties {private static final Charset DEFAULT_CHARSET = StandardCharsets.UTF_8;/*** SMTP server host. For instance, 'smtp.example.com'.*/private String host;/*** SMTP server port.*/private Integer port;/*** Login user of the SMTP server.*/private String username;/*** Login password of the SMTP server.*/private String password;/*** Protocol used by the SMTP server.*/private String protocol = "smtp";/*** Default MimeMessage encoding.*/private Charset defaultEncoding = DEFAULT_CHARSET;/*** Additional JavaMail Session properties.*/private Map<String, String> properties = new HashMap<>();/*** Session JNDI name. When set, takes precedence over other Session settings.*/private String jndiName;public String getHost() {return this.host;}public void setHost(String host) {this.host = host;}public Integer getPort() {return this.port;}public void setPort(Integer port) {this.port = port;}public String getUsername() {return this.username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return this.password;}public void setPassword(String password) {this.password = password;}public String getProtocol() {return this.protocol;}public void setProtocol(String protocol) {this.protocol = protocol;}public Charset getDefaultEncoding() {return this.defaultEncoding;}public void setDefaultEncoding(Charset defaultEncoding) {this.defaultEncoding = defaultEncoding;}public Map<String, String> getProperties() {return this.properties;}public void setJndiName(String jndiName) {this.jndiName = jndiName;}public String getJndiName() {return this.jndiName;}}
17.2.4. Modify application.properties
spring.application.name=springboot-09-test
spring.mail.username=email account
spring.mail.password=password
spring.mail.host=smtp.qq.com
# qq needs to configure SSL (enable password verification)
spring.mail.properties.mail.smtp.ssl.enable=true
17.2.4.1. Get authorization code
https://service.mail.qq.com/detail/0/141
17.2.5. Unit Testing
17.2.5.1. Modify Springboot09TestApplicationTests.java
package com.P51;import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;@SpringBootTest
class Springboot09TestApplicationTests {@AutowiredJavaMailSenderImpl mailSender;@Testvoid contextLoads() {// A simple emailSimpleMailMessage mailMessage = new SimpleMailMessage();mailMessage.setSubject("Email Subject Here");mailMessage.setText("This is the body of the email");mailMessage.setTo("xxx");mailMessage.setFrom("xxx");mailSender.send(mailMessage);}}
17.2.5.2. Run the project
2024.6.5 Wednesday
17.2.6. Modify Springboot09TestApplicationTests.java to send a relatively complex email
package com.P51;import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;@SpringBootTest
class Springboot09TestApplicationTests {@AutowiredJavaMailSenderImpl mailSender;@Testvoid contextLoads() {// A simple emailSimpleMailMessage mailMessage = new SimpleMailMessage();mailMessage.setSubject("Email Subject Here");mailMessage.setText("This is the body of the email");mailMessage.setTo("xxx"); // RecipientmailMessage.setFrom("xxx"); // SendermailSender.send(mailMessage);}@Testvoid contextLoads1() throws MessagingException {// A complex emailMimeMessage mimeMessage = mailSender.createMimeMessage();// AssemblyMimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);// Contenthelper.setSubject("Email Subject for contextLoads1 Here");helper.setText("<p style='color:red'>This is the body of the contextLoads1 email</p>", true);// Attachmentshelper.addAttachment("Content_to_configure_after_creating_a_new_springboot_project.pdf", new File("Physical address of the file on the computer"));helper.addAttachment("running.ico", new File("Physical address of the ico on the computer"));helper.setTo("xxx"); // Recipienthelper.setFrom("xxx"); // SendermailSender.send(mimeMessage);}}
17.2.7. Encapsulation (Complete code of Springboot09TestApplicationTests.java)
package com.P51;import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;@SpringBootTest
class Springboot09TestApplicationTests {@AutowiredJavaMailSenderImpl mailSender;@Testvoid contextLoads() {// A simple emailSimpleMailMessage mailMessage = new SimpleMailMessage();mailMessage.setSubject("Email Subject Here");mailMessage.setText("This is the body of the email");mailMessage.setTo("xxx"); // RecipientmailMessage.setFrom("xxx"); // SendermailSender.send(mailMessage);}@Testvoid contextLoads1() throws MessagingException {// A complex emailMimeMessage mimeMessage = mailSender.createMimeMessage();// AssemblyMimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true); // Supports multi-part uploads// Contenthelper.setSubject("Email Subject for contextLoads1 Here");helper.setText("<p style='color:red'>This is the body of the contextLoads1 email</p>", true);// Attachmentshelper.addAttachment("Content_to_configure_after_creating_a_new_springboot_project.pdf", new File("Physical address of the file on the computer"));helper.addAttachment("running.ico", new File("Physical address of the ico on the computer"));helper.setTo("xxx"); // Recipienthelper.setFrom("xxx"); // SendermailSender.send(mimeMessage);}// Encapsulation: Parameters can be encapsulated, not fully shown here/** Shortcut key for this comment: type /** and press Enter** @param html* @param subject* @param text* @throws MessagingException* @Author ZzzZzzzZzzzz-*/public void sendMail(Boolean html, String subject, String text) throws MessagingException {// A complex emailMimeMessage mimeMessage = mailSender.createMimeMessage();// AssemblyMimeMessageHelper helper = new MimeMessageHelper(mimeMessage, html);// Contenthelper.setSubject(subject);helper.setText(text, true);// Attachmentshelper.addAttachment("Content_to_configure_after_creating_a_new_springboot_project.pdf", new File("Physical address of the file on the computer"));helper.addAttachment("running.ico", new File("Physical address of the ico on the computer"));helper.setTo("xxx"); // Recipienthelper.setFrom("xxx"); // SendermailSender.send(mimeMessage);}}