【SpringBoot高级】:Springboot与任务:发送邮件的3种方式 记住!!!!!


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


邮件发送过程(Spring Email):
(1)首先要把远程端的邮箱(寄件人邮箱)的POP3/SMTP协议开启,配置好邮箱信息;
(2)我们需要封装一个发送邮件的工具类,这样我们以后都可以用;
(3)明白发件人是谁(这是固定的);收件人(不固定),邮件主题和内容(不固定);
(4)比如,我们建一个工具类MailClient,把收件人数据(固定)注入到IOC容器让Spring管理,以后都可以用;这个工具类用到一个接口 JavaMailSender,这个接口有两个方法:MimeMessage createMimeMessage()和send,MimeMessage 用来构建信息,send用来发送构建的信息。
(5)如何构建信息:因为这个接口只是创建了一个MimeMessage模板,但是信息还不起作用,只是空模板,需要spring提供一个MimeMessageHelper帮助类,构建MimeMessage信息。
(6)当帮助类构建好信息后,就可以通过帮助类构建的信息去设置收件人,寄件人,邮件主题、内容、图片附件等,最后由send去发送信息。整个过程大概就是这样。


1. 准备

1.导入依赖

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

2.配置邮箱相关参数:
注意密码不是邮箱密码,是授权验证码

# 邮箱配置
# MailProperties
#域名
spring.mail.host=smtp.sina.com
#端口号:一般邮箱的端口号都是465
spring.mail.port=465
#寄件人邮箱
spring.mail.username=jh752336828@sina.com
#这个密码是授权验证码:在设置里开启POP3/SMTP协议
spring.mail.password=22c496f8da84e365
spring.mail.protocol=smtps
spring.mail.properties.mail.smtp.ssl.enable=true

在下面开启第一个服务发送短信获取授权码:
在这里插入图片描述

2. 发送简单邮件

这里用到了JavaMailSender的实现类 JavaMailSenderImpl
发送简单文本邮件类:SimpleMailMessage

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootTaskApplicationTests {

    @Autowired
    JavaMailSenderImpl mailSender;

    @org.junit.Test
        //简单的消息邮件发送
    public void contextLoads() {
        SimpleMailMessage message = new SimpleMailMessage();

        //邮件标题
        message.setSubject("通知-今晚开会");
        //邮件内容
        message.setText("今晚7:30开会");

        //给谁发邮件
        message.setTo("18751887307@163.com");
        message.setFrom("624097754@qq.com");

        mailSender.send(message);
    }

在这里插入图片描述

3. 发送复杂邮件 Spring Email

这个可以发送HTML格式的

 @Test
  public void test02() throws  Exception{
      //1、创建一个复杂的消息邮件
      MimeMessage mimeMessage = mailSender.createMimeMessage();
      MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);

      //邮件设置
      helper.setSubject("通知-今晚开会");
      helper.setText("<b style='color:red'>今天 7:30 开会</b>",true);

      helper.setTo("18751887307@163.com");
      helper.setFrom("624097754@qq.com");


      //上传文件
      helper.addAttachment("1.jpg",new File("C:\\Users\\hh\\Desktop\\1.jpg"));

      mailSender.send(mimeMessage);
  }

(2) 看个变化版的,熟悉邮件发送流程
看下这个JavaMailSender的源码只有两个方法:

public interface JavaMailSender extends MailSender {
    MimeMessage createMimeMessage();
    MimeMessage createMimeMessage(InputStream var1) throws MailException;

    void send(MimeMessage var1) throws MailException;
    void send(MimeMessage... var1) throws MailException;
    void send(MimeMessagePreparator var1) throws MailException;
    void send(MimeMessagePreparator... var1) throws MailException;
}

spring提供的帮助类MimeMessageHelper来创建MimeMessage实例

public MimeMessageHelper(MimeMessage mimeMessage) {
        this(mimeMessage, (String)null);
    }

编写邮件发送客户端发送邮件:(封装一个邮件工具类MailClient)
这个解释看下看下!!!!

@Component
public class MailClient {
    private static final Logger logger = LoggerFactory.getLogger(MailClient.class);

    @Autowired//JavaMailSender类组件注入到IOC容器
    private JavaMailSender mailSender;

    @Value("${spring.mail.username}")//把固定的发件人数据注入到IOC容器,让Spring管理
    private String from;

    public void sendMail(String to, String subject, String content) {
        try {
            //JavaMailSender类第一个方法:createMimeMessage()方法
            // 创建了一个MimeMessage模板,但是信息还不起作用,只是空模板
            MimeMessage message = mailSender.createMimeMessage();
            //引入spring提供的MimeMessageHelper帮助类,构建MimeMessage信息
            MimeMessageHelper helper = new MimeMessageHelper(message);
            //寄件人
            helper.setFrom(from);
            //收件人
            helper.setTo(to);
            //主题
            helper.setSubject(subject);
            //加了true,允许邮件内容是一个HTML(MimeMessageHelper将html字符串转换成文本)文本
            //不加true,就是普通的文本
            helper.setText(content, true);
            /**JavaMailSender类第二个方法:send方法,发送经spring提供的帮助类				 MimeMessageHelper
             * 创建的MimeMessage信息*/
            mailSender.send(helper.getMimeMessage());
        } catch (MessagingException e) {
            logger.error("发送邮件失败:" + e.getMessage());
        }
    }
}

4. 通过Thymeleaf 发送 HTML 邮件

通过Thymeleaf 发送 HTML 邮件 :

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>邮件示例</title>
</head>
<body>
    <p>欢迎你, <span style="color:red;" th:text="${username}"></span>!</p>
</body>
</html>

发送邮件:

通过模板引擎Thymeleaf发送

  • 记住:这里是测试类需要主动注入模板引擎才能调用,这里注入Thymeleaf的一个核心类TemplateEngine到容器中由spring管理;

  • 而在Controller层里,直接返回模板引擎的路径,SpringMVC的核心组件:DispatcherServlet自动帮我们去调用模板

    测试类:

@RunWith(SpringRunner.class)
@SpringBootTest
@ContextConfiguration(classes = CommunityApplication.class)
public class MailTests {
    
     @Autowired//注入工具类(封装好了)
    private MailClient mailClient;
    
    //使用Spring注入核心组件
    @Autowired//注入模板引擎
    private TemplateEngine templateEngine;
    
    //使用JavaMailSender直接发送邮件
    @Test
    public void testTextMail() {
        mailClient.sendMail("752336828@qq.com", "TEST", "Welcome.");
    }

    //使用Thymeleaf模板引擎发送邮件
    @Test
    public void testHtmlMail() {
        Context context = new Context();
        //定义模板数据,传入参数,username与demo.html中${username}匹配
        context.setVariable("username", "sunday");
        //定义获取thymeleaf的模板路径,以及模板数据
        String content = templateEngine.process("/mail/demo", context);
        mailClient.sendMail("752336828@qq.com", "HTML", content);
    }
}

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值