SpringBoot整合网易邮箱

news2024/12/29 10:31:02

SpringBoot整合邮箱

1,开启POP3/SMTP/IMAP服务

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RM24mKMp-1687834282584)(D:\MavenObject\邮箱验证码\短信验证码.assets\image-20230626145621655.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UbsfWxtY-1687834282584)(D:\MavenObject\邮箱验证码\短信验证码.assets\image-20230626145706052.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lTV35iRU-1687834282585)(D:\MavenObject\邮箱验证码\短信验证码.assets\image-20230626145500896.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-22nRoxPc-1687834282586)(D:\MavenObject\邮箱验证码\短信验证码.assets\image-20230626145515444.png)]

注意:每个邮箱的密码唯一,不要随意分享给他人

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NDsWZAba-1687834282586)(D:\MavenObject\邮箱验证码\短信验证码.assets\image-20230627085851724.png)]

最后就是这个样子了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NvtM91Wa-1687834282587)(D:\MavenObject\邮箱验证码\短信验证码.assets\image-20230626145554617.png)]

2,整合测试

2.1,pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w5.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.3</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.sin</groupId>
    <artifactId>mail_massage</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>mail_massage</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>8</java.version>
    </properties>
    <dependencies>
        <!-- 短信业务 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>


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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.22.2</version>
                <configuration>
                    <skipTests>true</skipTests>
                </configuration>
            </plugin>

        </plugins>
    </build>
</project>

2.2,application.yml

spring:
  mail:
    # 配置SMTP服务器地址
    host: smtp.126.com
    # 配置端口号465或者25
    port: 25
    # 发送者邮箱(根据自己邮箱填写)
    username: sin8023@126.com
    #  配置密码,注意是开启POP3/SMTP的授权密码(根据自己的授权密码填写)
    password: SZBSI****HNYAA*

    properties:
      mail:
        smtp:
          auth: true
          enable: true
          ssl:
            # 设为true时 端口号设为 465 设为false时 端口号设为25
            enable: false
          socketFactoryClass: javax.net.ssl.SSLSocketFactory
        #表示开启 DEBUG 模式,这样,邮件发送过程的日志会在控制台打印出来,方便排查错误
        debug: true
    # 邮箱编码格式
    default-encoding: UTF-8

2.3,MailService.java

package com.sin.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;

/**
 * @CreateName SIN
 * @CreateDate 2023/06/27 8:50
 * @description
 */
@Service
public class MailService {
    @Autowired(required = false)
    private JavaMailSender mailSender;

    @Value("${spring.mail.username")
    private String userName;

    /**
     *
     * @param to 收件人
     * @param subject 邮箱标题
     * @param content 邮箱内容
     * @throws MessagingException
     */
    public void sendMail(String to, String subject, String content) throws MessagingException {
        MimeMessage message = mailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(message, true);
        //邮箱发送者
        helper.setFrom(userName);
        //收件人,可以为多个收件人,收件人之间用逗号隔开
        helper.setTo(to);
        // 邮箱标题
        helper.setSubject(subject);
        // 邮箱内容
        helper.setText(content, true);
        mailSender.send(message);
    }
}

2.4,MailController.java

package com.sin.controller;

import com.sin.service.MailService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.mail.MessagingException;

/**
 * @CreateName SIN
 * @CreateDate 2023/06/27 8:50
 * @description
 */
@RestController
public class MailController {

    @Autowired
    private MailService mailService;

    @GetMapping("/sendMail")
    public String sendMail() {
        try {
            mailService.sendMail("1824368699@qq.com", "测试邮箱", "使用SpringBoot整合邮箱发送消息");
            return "邮件发送成功";
        } catch (MessagingException e) {
            e.printStackTrace();
            return "邮件发送失败";
        }
    }

}

2.5,测试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zPKi72VN-1687834282587)(D:\MavenObject\邮箱验证码\短信验证码.assets\image-20230627090650640.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XnOiQwib-1687834282588)(D:\MavenObject\邮箱验证码\短信验证码.assets\image-20230627091903490.png)]

2.6,查看结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3lps2nDY-1687834282588)(D:\MavenObject\邮箱验证码\短信验证码.assets\image-20230627085626640.png)]

3,发送附件

3.1,MailFileServier.java

package com.sin.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;

/**
 * @CreateName SIN
 * @CreateDate 2023/06/27 10:03
 * @description
 */
@Service
public class MailFileServier {

    @Autowired(required = false)
    private JavaMailSender mailSender;

    @Value("${spring.mail.username}")
    private String userName;

    /**
     *
     * @param to 收件人
     * @param subject 邮箱标题
     * @param content 邮箱内容
     * @throws MessagingException
     */
    public void sendMail(String to, String subject, String content, String imgName, File file) throws MessagingException {
        MimeMessage message = mailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(message, true);
        //邮箱发送者
        helper.setFrom(userName);
        //收件人,可以为多个收件人,收件人之间用逗号隔开
        helper.setTo(to);
        // 邮箱标题
        helper.setSubject(subject);
        // 邮箱内容
        helper.setText(content, true);

        helper.addAttachment(imgName,file);
        mailSender.send(message);
    }
}

3.2,MailFileController.java

package com.sin.controller;

import com.sin.service.MailFileServier;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.mail.MessagingException;
import java.io.File;

/**
 * @CreateName SIN
 * @CreateDate 2023/06/27 10:05
 * @description
 */
@RestController
public class MailFileController {


    @Autowired
    private MailFileServier mailFileServier;

    @GetMapping("/sendFile")
    public String sendMail() {
        try {
            mailFileServier.sendMail("1824368699@qq.com", "测试邮箱", "使用SpringBoot整合邮箱发送消息",
                    "sql作业.txt" ,new File("E:\\SQL默写.txt"));
            return "邮件发送成功";
        } catch (MessagingException e) {
            e.printStackTrace();
            return "邮件发送失败";
        }
    }
}

3.3,测试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dhxq7k0b-1687834282589)(D:\MavenObject\邮箱验证码\短信验证码.assets\image-20230627101748001.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gT21Ei6u-1687834282589)(D:\MavenObject\邮箱验证码\短信验证码.assets\image-20230627101758792.png)]

4,发送图片

4.1,MailImgServier.java

package com.sin.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;

/**
 * @CreateName SIN
 * @CreateDate 2023/06/27 10:21
 * @description
 */
@Service
public class MailImgService {

    @Autowired(required = false)
    private JavaMailSender mailSender;

    @Value("${spring.mail.username}")
    private String userName;

    /**
     *
     * @param to 收件人
     * @param subject 邮箱标题
     * @param content 邮箱内容
     * @throws MessagingException
     */
    public void sendMail(String to, String subject, String content, String imgName, FileSystemResource file) throws MessagingException {
        MimeMessage message = mailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(message, true);
        //邮箱发送者
        helper.setFrom(userName);
        //收件人,可以为多个收件人,收件人之间用逗号隔开
        helper.setTo(to);
        // 邮箱标题
        helper.setSubject(subject);
        // 邮箱内容
        helper.setText(content, true);

        helper.addInline(imgName,file);
        mailSender.send(message);
    }
}

4.2,MailImgController.java

package com.sin.controller;

import com.sin.service.MailFileServier;
import com.sin.service.MailImgService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.FileSystemResource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.mail.MessagingException;
import java.io.File;

/**
 * @CreateName SIN
 * @CreateDate 2023/06/27 10:21
 * @description
 */
@RestController
public class MailImgController {


    @Autowired
    private MailImgService mailImgServier;

    @GetMapping("/sendImg")
    public String sendMail() {
        try {
            mailImgServier.sendMail("1824368699@qq.com", "测试邮箱",
                    "<h1>使用SpringBoot发送图片到邮箱</h1><p>图片:</p><img src='cid:img1'/>",
                    "img1" ,new FileSystemResource(new File("F:\\Users\\sin\\Pictures\\2.jpg")));
            return "邮件发送成功";
        } catch (MessagingException e) {
            e.printStackTrace();
            return "邮件发送失败";
        }
    }
}

4.3,测试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VJ8ediqZ-1687834282589)(D:\MavenObject\邮箱验证码\短信验证码.assets\image-20230627100945258.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SY1WTNo5-1687834282590)(D:\MavenObject\邮箱验证码\短信验证码.assets\image-20230627103726435.png)]

5,随机验证码

5.1,导入thymeleaf模板

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<!-- Java提供的工具库 -->
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>5.9</version>
</dependency>

5.2,application.yml

## thymeleaf模板设置
spring:
    thymeleaf:
      prefix: classpath:/templates/
      suffix: .html
      mode: HTML
      encoding: utf-8
      servlet.content-type: text/html
      check-template-location: true  #检查模板路径是否存在
      cache: false

5.3,RandomCodeUtil.java

package com.sin.util;

import org.apache.commons.lang5.RandomStringUtils;

/**
 * @CreateName SIN
 * @CreateDate 2023/06/27 9:26
 * @description 生成随机验证码
 * 使用了Apache Commons Lang库中的RandomStringUtils类来生成随机数字字符串。
 */
public class RandomCodeUtil {

    public static String generateCode(int length){
        return RandomStringUtils.randomNumeric(length);
    }
}

5.4,EmailCodeService.java

package com.sin.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Service;

/**
 * @CreateName SIN
 * @CreateDate 2023/06/27 9:29
 * @description
 */
@Service
public class EmailCodeService {

    @Autowired(required = false)
    private JavaMailSender mailSender;

    @Value("${spring.mail.username}")
    private String userName;

    public void sendSimpleMessage(String to, String subject, String text) {
        SimpleMailMessage message = new SimpleMailMessage();
        //邮箱发送者
        message.setFrom(userName);
        //收件人,可以为多个收件人,收件人之间用逗号隔开
        message.setTo(to);
        // 邮箱标题
        message.setSubject(subject);
        // 邮箱内容
        message.setText(text);
        mailSender.send(message);
    }
}

5.5,EmailCodeController.java

package com.sin.controller;

import com.sin.service.EmailCodeService;
import com.sin.util.RandomCodeUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @CreateName SIN
 * @CreateDate 2023/06/27 9:30
 * @description
 */
@Controller
public class EmailCodeController {

    @Autowired
    private EmailCodeService emailCodeService;


    @GetMapping("/login")
    public String home(Model model) {
        // 生成6位随意验证码
        String code = RandomCodeUtil.generateCode(6);
        emailCodeService.sendSimpleMessage("1824368699@qq.com", "验证码", code);
        model.addAttribute("code", code);
        return "login.html";
    }

}

5.6,测试

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f5SnqS5d-1687834282590)(D:\MavenObject\邮箱验证码\短信验证码.assets\image-20230627095443438.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8YWPyhNN-1687834282590)(D:\MavenObject\邮箱验证码\短信验证码.assets\image-20230627095423170.png)]

6,随机验证码登录

未完继续!!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/693242.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Just KNIME it [S2C13] 机器学习的可解释性

朋友们&#xff0c;Just KNIME it 还有在跟进吗? 本季已经到 13 期啦。 本期探讨的主题是机器学习的可解释性问题&#xff0c;快随指北君一起看看吧。 挑战 挑战13&#xff1a;揭示犯罪率之迷 难度&#xff1a;中等 情境描述&#xff1a;作为一名在房地产公司任职的数据科学家…

Apikit 自学日记:发起文档测试-HTTP

HTTP 功能入口&#xff1a;API管理应用 / 选中某个项目 / API文档菜单 / 选中某一API文档 / 点击“测试”TAB API文档测试页&#xff0c;可对该API文档描述的接口进行快速测试。API文档测试页分为地址控制栏、请求控制区、返回展示区&#xff0c;以及测试辅助工具区共四个部分…

Android进阶之路 - 深入浅出字体、字体库

当时组内临时接到一个换字体库的需求&#xff0c;这个需求相对简单&#xff0c;因为手头有其他事情&#xff0c;同时之前也没换过字体库&#xff0c;就交给了同事去做了&#xff1b;现在有时间就好好充实下自己 ( 我写的也未必全对&#xff0c;如有不足可直接提出&#xff0c;相…

vue 组件基本使用方法

前言:vue 可以比较灵活的使用 html的片段&#xff0c;并将html的片段进行数据隔离&#xff0c;参数也可以互相传递&#xff0c;组件与组件之间也可以进行数据的交互 合理的使用组件可以避免重复代码或者很方便的调用第三方组件库 vue组件 简单实例组件传参实际应用父子组件交互…

右键文件夹添加指定打开的程序(如:IDEA、PyCharm等)

一.打开注册表 使用winR打开运行界面(默认为左下角)输入regedit 二.进入指定目录 1.找不到可直接复制路径: 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Directory\shell 2.在当前路径shell下右键->新建->项->命名IDEA &#xff08;名字任意即可&#xff09;,修改默认…

利用影刀RPA批量导出excel中的图片并重命名

本程序要求excel中的图片应该符合以下截图中的格式&#xff1a; 图片和名称应该处于同一行&#xff0c;而且图片应该是嵌入在单元格中 程序参考&#xff1a;

linux系统Nginx服务Rewrite重写

文章目录 一、Rewrite跳转场景二、Rewrite跳转实现三、Rewrite实际场景1.Nginx跳转需求的实现方式2.rewrite放在 server{}、if{}、location{}段中3.对域名或参数字符串 四、Nginx正则表达式1.常用的正则表达式元字符2.正则表达式的优点 五、Rewrite命令1.Rewrite命令语法2.flag…

数字IC前端学习笔记:仲裁轮询(六)

相关文章 数字IC前端学习笔记&#xff1a;LSFR&#xff08;线性反馈移位寄存器&#xff09; 数字IC前端学习笔记&#xff1a;跨时钟域信号同步 数字IC前端学习笔记&#xff1a;信号同步和边沿检测 数字IC前端学习笔记&#xff1a;锁存器Latch的综合 数字IC前端学习笔记&am…

数据库学习3

主键使用 主键的使用 CREATE TABLE t17 (id INT PRIMARY KEY ,name VARCHAR(32), email VARCHAR(32)); 主键列的值不可以重复 INSERT INTO t17 VALUES(1,jack,jacksohu.com); INSERT INTO t17 VALUES(2,tom,tomsohu.com); INSERT INTO t17 VALUES(1,hsp,hspsohu.com); SELECT …

《计算机系统与网络安全》 第九章 访问控制技术

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

2022(二等奖)C859基于WebGIS的南京市排污口管理系统

作品介绍 一、需求分析 &#xff08;一&#xff09;社会需求 《国务院办公厅关于加强入河入海排污口监督管理工作的实施意见》明确提出&#xff0c;入河入海排污口(以下简称排污口&#xff09;是指直接或通过管道、沟、渠等排污通道向环境水体排放污水的口门&#xff0c;是流…

Day40

思维导图 练习 定义一个命名空间Myspace&#xff0c;包含以下函数&#xff1a;将一个字符串中的所有单词进行反转&#xff0c;并输出反转后的结果。例如&#xff0c;输入字符串为"Hello World"&#xff0c;输出结果为"olleH dlroW"&#xff0c;并在主函数…

Visual C++中的虚函数和纯虚函数的定义

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天来说说Visual C中的虚函数和纯虚函数。 直接说虚函数和纯虚函数有很多人会直接晕&#xff0c;但是来看这篇帖子的很多人是有JAVA或其他面象对象编程基础的&#xff0c;我要不就先作个类比&#xff0c;究…

【Java面试题】Java基础——排序算法

文章目录 冒泡排序★★★算法步骤动图演示代码示例 选择排序算法步骤动图演示 插入排序算法步骤动图演示 快速排序算法步骤动图演示 冒泡排序★★★ 冒泡排序&#xff08;Bubble Sort&#xff09;也是一种简单直观的排序算法。 它重复的遍历过要排序的数列&#xff0c;一次比…

Debian 12 “bookworm” 正式发布

经过 1 年 9 个月零 28 天的开发&#xff0c;Debian 项目推出了其新的稳定版本 12&#xff08;代号 bookworm&#xff09;。 Debian 12 包含超过 11,089 个新软件包&#xff0c;总计 64,419 个软件包&#xff0c; 6,296 个软件包已作为过时包删除。此版本更新了 43,254 个软件…

threejs让模型始终面向相机

需求&#xff1a;threejs导入3D模型&#xff0c;改变相机位置的同时&#xff0c;让模型始终面向相机。 实现方式&#xff1a;使用模型的lookAt()方法&#xff0c;设置模型lookAt的值 首次加载模型时&#xff0c;面向相机 load.load(/model5.glb, g > {// 获取相机位置const…

浮点数不再神秘:JS浮点数精度详解

文章目录 I. 引言JS中什么是浮点数为什么精度会受到影响 II. 浮点数精度的问题浮点数精度丢失的例子JS中最常见的浮点数问题精度问题对计算的影响 III. 如何避免浮点数精度问题使用精度库避免精度错误的方法显示控制精度的方法 IV. 浮点数精度问题与前端开发前端开发中的浮点数…

在k8s上部署vue

1. dockerfile镜像文件编写 # 拉取 nginx镜像 FROM nginx:1.24.0# 拷贝 nginx 配置文件到 docker中 COPY nginx.conf /etc/nginx/nginx.conf# 拷贝vue打包后的文件到 docker中 COPY webapp /usr/share/nginx/html# 新增时区设置 RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai…

【FreeRTOS】FreeRTOS 静态创建任务与删除

0. 实验准备 正点原子 STM32407ZG 探索者开发板 FreeRTOS 例程模板&#xff08;可以在这一篇文章找到&#xff1a;STM32F407 移植 FreeRTOS&#xff09; 1. 静态创建任务函数 API 1.1 函数简介 动态创建任务需要使用到BaseType_t xTaskCreate函数&#xff0c;我们可以在 Fr…

VUE L ∠脚手架 插曹Vuex ⑩⑨

目录 文章有误请指正&#xff0c;如果觉得对你有用&#xff0c;请点三连一波&#xff0c;蟹蟹支持✨ V u e j s Vuejs Vuejs C L I CLI CLI 插槽 ❗ C L I CLI CLI V u e X VueX VueX 1、概念 2、何时使用&#xff1f; 3、搭建 V u e x Vuex Vuex环境 4、基本使用…