• 【WEEK15】 【DAY2】【DAY3】邮件任务【中文版】


    接上文【WEEK15】 【DAY1】异步任务【中文版】


    2024.6.4 Tuesday

    17.异步、定时、邮件任务

    17.2.邮件任务

    17.2.1.邮件发送,在我们的日常开发中,也非常的多,Springboot也帮我们做了支持

    • 邮件发送需要引入spring-boot-start-mail
    • SpringBoot 自动配置MailSenderAutoConfiguration
    • 定义MailProperties内容,配置在application.yml中
    • 自动装配JavaMailSender
    • 测试邮件发送

    17.2.2.添加spring-boot-starter-mail依赖

    
    <dependency>
       <groupId>org.springframework.bootgroupId>
       <artifactId>spring-boot-starter-mailartifactId>
    dependency>
    

    17.2.3.查看自动配置类MailSenderAutoConfiguration.class

    这个类中没有注册bean,再点开MailSenderJndiConfiguration.class可见
    在这里插入图片描述

    查看配置文件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.修改application.properties

    spring.application.name=springboot-09-test
    spring.mail.username=邮箱账号
    spring.mail.password=密码
    spring.mail.host=smtp.qq.com
    # qq需要配置ssl(开启密码验证)
    spring.mail.properties.mail.smtp.ssl.enable=true
    

    在这里插入图片描述

    17.2.4.1.获取授权码

    https://service.mail.qq.com/detail/0/141
    在这里插入图片描述
    在这里插入图片描述

    17.2.5.单元测试

    17.2.5.1.修改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 {
       @Autowired
       JavaMailSenderImpl mailSender;
    
       @Test
       void contextLoads() {
          //一个简单的邮件
          SimpleMailMessage mailMessage = new SimpleMailMessage();
          mailMessage.setSubject("邮件主题在这里");
          mailMessage.setText("这里是邮件的正文");
          mailMessage.setTo("xxx");
          mailMessage.setFrom("xxx");
          mailSender.send(mailMessage);
       }
    
    }
    
    17.2.5.2.运行项目

    在这里插入图片描述

    2024.6.5 Wednesday

    17.2.6.修改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 {
       @Autowired
       JavaMailSenderImpl mailSender;
    
       @Test
       void contextLoads() {
          //一个简单的邮件
          SimpleMailMessage mailMessage = new SimpleMailMessage();
          mailMessage.setSubject("邮件主题在这里");
          mailMessage.setText("这里是邮件的正文");
          mailMessage.setTo("xxx"); //收件人
          mailMessage.setFrom("xxx");  //发件人
          mailSender.send(mailMessage);
       }
    
       @Test
       void contextLoads1() throws MessagingException {
          //一个复杂的邮件
          MimeMessage mimeMessage = mailSender.createMimeMessage();
          //组装
          MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
    
          //内容
          helper.setSubject("contextLoads1的邮件主题在这里");
          helper.setText("

    这里是contextLoads1邮件的正文

    "
    ,true); //附件 helper.addAttachment("新建springboot项目后需要配置的内容.pdf",new File("该文件在电脑内的物理地址")); helper.addAttachment("running.ico",new File("该ico在电脑内的物理地址")); helper.setTo("xxx"); //收件人 helper.setFrom("xxx"); //发件人 mailSender.send(mimeMessage); } }

    在这里插入图片描述

    17.2.7.封装(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 {
       @Autowired
       JavaMailSenderImpl mailSender;
    
       @Test
       void contextLoads() {
          //一个简单的邮件
          SimpleMailMessage mailMessage = new SimpleMailMessage();
          mailMessage.setSubject("邮件主题在这里");
          mailMessage.setText("这里是邮件的正文");
          mailMessage.setTo("xxx"); //收件人
          mailMessage.setFrom("xxx");  //发件人
          mailSender.send(mailMessage);
       }
    
       @Test
       void contextLoads1() throws MessagingException {
          //一个复杂的邮件
          MimeMessage mimeMessage = mailSender.createMimeMessage();
          //组装
          MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);   //支持多文本上传
    
          //内容
          helper.setSubject("contextLoads1的邮件主题在这里");
          helper.setText("

    这里是contextLoads1邮件的正文

    "
    ,true); //附件 helper.addAttachment("新建springboot项目后需要配置的内容.pdf",new File("该文件在电脑内的物理地址")); helper.addAttachment("running.ico",new File("该ico在电脑内的物理地址")); helper.setTo("xxx"); //收件人 helper.setFrom("xxx"); //发件人 mailSender.send(mimeMessage); } //封装:参数都可以进行分装,这里没有全部展示完整 /**这段注释的快捷键:输入/**后回车 * * @param html * @param subject * @param text * @throws MessagingException * @Author ZzzZzzzZzzzz- */ public void sendmail(Boolean html, String subject, String text) throws MessagingException { //一个复杂的邮件 MimeMessage mimeMessage = mailSender.createMimeMessage(); //组装 MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, html); //内容 helper.setSubject(subject); helper.setText(text,true); //附件 helper.addAttachment("新建springboot项目后需要配置的内容.pdf",new File("该文件在电脑内的物理地址")); helper.addAttachment("running.ico",new File("该ico在电脑内的物理地址")); helper.setTo("xxx"); //收件人 helper.setFrom("xxx"); //发件人 mailSender.send(mimeMessage); } }
  • 相关阅读:
    京东销售码洋与广告投入及销量预测【数据集+完整代码】
    JVM面试高频问题
    【mq】从零开始实现 mq-11-消费者消息回执添加分组信息 pull message ack groupName
    开源移动核心网Magma架构设计启示
    怎么停止正在进行的Windows更新?
    【每日一题】1109. 航班预订统计
    无代码平台助力中山医院搭建“智慧化管理体系”,实现智慧医疗
    Pytorch特征图heat map热力图
    IOS OpenGL ES GPUImage 图像阀值素描,形成有噪点的素描 GPUImageThresholdSketchFilter
    红黑树概述
  • 原文地址:https://blog.csdn.net/2401_83329143/article/details/139314945