国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

springboot(java)使用javamail實(shí)現(xiàn)郵件的接收、轉(zhuǎn)發(fā)、發(fā)送、清除

這篇具有很好參考價(jià)值的文章主要介紹了springboot(java)使用javamail實(shí)現(xiàn)郵件的接收、轉(zhuǎn)發(fā)、發(fā)送、清除。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

前言

最近在弄郵件相關(guān)的功能,被搞的頭大,很多找的方法根本不知道該怎么往下走,就目前為止,
經(jīng)過(guò)各種的碰壁和失敗,就整理出來(lái)如何使用javamail實(shí)現(xiàn)郵件的接收、轉(zhuǎn)發(fā)、發(fā)送、清除
不單單是分享,也為我后續(xù)查找更方便做一個(gè)記錄

郵件相關(guān)概念

在正式發(fā)送郵件之前,我們應(yīng)該對(duì)郵件有一個(gè)概念

第一點(diǎn):
我覺(jué)得也是最重要的,接收和發(fā)送的主機(jī)host端口port不一樣的;我一開(kāi)始的時(shí)候,并不懂;直接就不管是發(fā)送還是接收都用的一個(gè)主機(jī)host端口port

第二點(diǎn):
接收郵件和發(fā)送郵件的協(xié)議不一樣
發(fā)送郵件用的是SMTP,SMTP 即簡(jiǎn)單郵件傳輸協(xié)議,用于郵件發(fā)送。SMTP 認(rèn)證,簡(jiǎn)單地說(shuō)就是要求必須提供賬戶(hù)名和密碼之后才可以登錄 SMTP 服務(wù)器。
接收郵件用的是POP3,
POP3協(xié)議允許電子郵件客戶(hù)端下載服務(wù)器上的郵件,但是這個(gè)下載不會(huì)影響服務(wù)器本身的郵件

至于另外還有一個(gè)是IMAP 的協(xié)議,因?yàn)槲疫@邊并沒(méi)有用到就不多說(shuō),感興趣百度即可

導(dǎo)入依賴(lài)

用的是javamail,因此是需要導(dǎo)入javamail的maven依賴(lài)包

<!--        郵件-->
        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>javax.mail-api</artifactId>
            <version>1.5.5</version>
        </dependency>
        <dependency>
            <groupId>com.sun.mail</groupId>
            <artifactId>javax.mail</artifactId>
            <version>1.5.5</version>
        </dependency>

郵件發(fā)送

    public void sendMail(String toEmail, String ccEmail, String bccEmail, String subject, String text, List<File> files) {
        try {
            System.setProperty("mail.mime.splitlongparameters", "false");
            final JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
            javaMailSender.setUsername(username);
            javaMailSender.setPassword(password);
            javaMailSender.setHost(host);
            javaMailSender.setPort(port);
            javaMailSender.setProtocol(protocol);
            javaMailSender.setDefaultEncoding(defaultEncoding);
            final Properties mailProperties = new Properties();
            mailProperties.put("mail.smtp.auth", true);
            mailProperties.put("mail.smtp.starttls.enable", true);
            javaMailSender.setJavaMailProperties(mailProperties);
            final MimeMessage mimeMessage = getMimeMessage(toEmail, ccEmail, bccEmail, subject, text, javaMailSender, files,senderName);
            javaMailSender.send(mimeMessage);
        } catch (MessagingException e) {
            System.out.println("發(fā)送郵件失敗:"+e.getMessage());
        }
    }





    private MimeMessage getMimeMessage(String toEmail, String ccEmail, String bccEmail, String subject, String text,
                                       JavaMailSenderImpl javaMailSender, List<File> files,String senderName) throws javax.mail.MessagingException {
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
        mimeMessageHelper.setFrom(senderName);
        mimeMessageHelper.setTo(toEmail.split(","));
        if (!Strings.isNullOrEmpty(ccEmail)) {
            mimeMessageHelper.setCc(ccEmail.split(","));
        }
        if (!Strings.isNullOrEmpty(bccEmail)) {
            mimeMessageHelper.setBcc(bccEmail.split(","));
        }
        mimeMessageHelper.setSubject(subject);
        mimeMessageHelper.setText(text, true);
        try {
            if (!CollectionUtils.isEmpty(files)) {
                for (File file : files) {
                    mimeMessageHelper.addAttachment(MimeUtility.encodeText(file.getName(), "GBK", "B"), file);
                }
            }
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
        return mimeMessage;
    }

sendMail方法
我們?cè)谑褂玫臅r(shí)候直接調(diào)用sendMail方法即可
其中,各個(gè)參數(shù)含義如下:
toEmail: 發(fā)送到對(duì)應(yīng)的郵箱
ccEmail:抄送到對(duì)應(yīng)的郵箱
bccEmail:秘密抄送到對(duì)應(yīng)郵箱
subject:郵件主題
text: 字符文本,可以是html元素文本
files:附件
在這個(gè)基礎(chǔ)上,其實(shí)我們還是有額外的參數(shù)需要設(shè)置的,可以定義成全局
username: 用于發(fā)送郵件的郵箱賬號(hào)
password: 用于發(fā)送郵件的郵箱密碼
host:發(fā)送郵件的主機(jī)
port:發(fā)送郵件的端口
protocol:發(fā)送郵件的協(xié)議,默認(rèn)值是:smtp
defaultEncoding:發(fā)送郵件的字符集,默認(rèn)使用UTF-8

在這里,host和port是根據(jù)你需要連的郵箱進(jìn)行設(shè)置的,比如連qq郵箱,網(wǎng)易郵箱。
百度能知道他們具體的協(xié)議和主機(jī)、端口

getMimeMessage方法
該方法其實(shí)主要就是將接收到的參數(shù)進(jìn)行賦值發(fā)送郵箱,不需要多余講解

郵件接收

    public static Message[] receiveMail(String receiveHost,String receivePort,String receiveProtocol,String username,String password) throws Exception {
        Properties props = new Properties();
        props.put("mail.pop3.host", receiveHost);
        props.put("mail.pop3.port", receivePort);
        Session session = Session.getInstance(props, new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(username, password);
            }
        });
        store =  session.getStore(receiveProtocol);
//        storeLocal.set(store);
        store.connect();
        folder = store.getFolder("INBOX");
//        folderLocal.set(folder);
        folder.open(Folder.READ_WRITE);
        Calendar calendar = Calendar.getInstance();
        // 搜索1天前到今天收到的的所有郵件,根據(jù)時(shí)間篩選郵件
        calendar.add(Calendar.DAY_OF_MONTH, -1);
        // 創(chuàng)建ReceivedDateTerm對(duì)象,ComparisonTerm.GE(大于等于),Date類(lèi)型的時(shí)間 new Date(calendar.getTimeInMillis())----(表示1天前)
        SentDateTerm term = new SentDateTerm(ComparisonTerm.GE, new Date(calendar.getTimeInMillis()));
        Message[] messages = folder.search(term);
        return messages;
    }

receiveMail方法
以下為各個(gè)參數(shù)說(shuō)明
receiveHost:接收郵件的主機(jī)
receivePort:接收郵件的端口
receiveProtocol:接收郵件的協(xié)議,默認(rèn)值:pop3
username: 需要接收郵件的賬號(hào)
password:需要接收郵件的密碼
這里也是需要賬號(hào)密碼的,區(qū)別在于你需要查找接收對(duì)應(yīng)郵箱有收到什么郵件,你就需要對(duì)應(yīng)賬號(hào)和密碼才能接收到

其中,注釋已經(jīng)標(biāo)注接收什么時(shí)間范圍內(nèi)的郵件

郵件轉(zhuǎn)發(fā)

轉(zhuǎn)發(fā)就有點(diǎn)意思,我找這個(gè)找遍了都沒(méi)有對(duì)應(yīng)的方法能夠?qū)崿F(xiàn),現(xiàn)在我來(lái)說(shuō)一下我是怎么樣的一個(gè)思路
要想轉(zhuǎn)發(fā),第一步,你就得先接收郵件
但是接收完郵件,你不能把FolderStore關(guān)閉掉
否則你是沒(méi)有辦法轉(zhuǎn)發(fā)的
那什么是Folder和Store?

接收郵件和發(fā)送郵件很類(lèi)似的都有用到Session,但是獲取到Session后,我們需要從Session獲取到特定類(lèi)型的Store,然后連接到Store。

這里的Store代表了存儲(chǔ)郵件的郵件服務(wù)器,在連接Store的過(guò)程中,我們是既有可能需要用到用戶(hù)名和密碼或者Authenticator,也就是驗(yàn)證的。

在連接到Store后,一個(gè)Folder對(duì)象,也叫目錄對(duì)象,會(huì)通過(guò)Store的getFolder方法獲取到郵件,也就能夠從中讀取到郵件。

這也是我們?yōu)槭裁聪朕D(zhuǎn)發(fā)不能關(guān)閉他們的原因。
第二步,開(kāi)始接收到需要轉(zhuǎn)發(fā)的郵件,然后將對(duì)應(yīng)郵件轉(zhuǎn)發(fā)。
第三步,在轉(zhuǎn)發(fā)完成之后我們才能夠?qū)⑵渫瓿赊D(zhuǎn)發(fā)
也就是,我們必須接收郵件和轉(zhuǎn)發(fā)郵件是同一個(gè)方法內(nèi)進(jìn)行的,沒(méi)辦法通過(guò)保存一個(gè)郵件類(lèi)型的對(duì)象,額外做操作對(duì)其進(jìn)行轉(zhuǎn)發(fā)。

我也是卡死在了這一步上。

于是轉(zhuǎn)發(fā)的方法如下:


  public void forwardMail(String receiveHost,String receivePort,String username,String password,String sendHost,String sendPort,String SendFrom,String SendTo) {
    //設(shè)置接收郵件
    final Properties receiveProps = new Properties();
    receiveProps.put("mail.pop3.host", receiveHost);
    receiveProps.put("mail.pop3.port", receivePort);
    final Session receiveSession = Session.getInstance(receiveProps, new Authenticator() {
      @Override
      protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(username, password);
      }
    });
    final ThreadLocal<Store> storeLocal = new ThreadLocal<>();
    final Store store = receiveSession.getStore("pop3");
    storeLocal.set(store);
    store.connect();
    final ThreadLocal<Folder> folderLocal = new ThreadLocal<>();
    final Folder folder = store.getFolder("INBOX");
    folderLocal.set(folder);
    folder.open(Folder.READ_WRITE);
    final Calendar calendar = Calendar.getInstance();
    // 搜索所有郵件,根據(jù)時(shí)間篩選
    calendar.add(Calendar.DAY_OF_MONTH, -10);//n天之內(nèi)
    // 創(chuàng)建ReceivedDateTerm對(duì)象,ComparisonTerm.GE(大于等于)
    final SentDateTerm term = new SentDateTerm(ComparisonTerm.GE, new Date(calendar.getTimeInMillis()));
    final Message[] messages = folder.search(term);
    for (Message mail : messages) {
      //String header = ((MimeMessage)mail).getHeader("SUBJECT")[0];
      //log.info("Header:{}", header);
      System.out.println("收到郵件的主題:", mail.getSubject());
      if (mail.isMimeType("multipart/related")) {
        final MimeMultipart mimeMultipart = (MimeMultipart) mail.getContent();
        for (int i = 0; i < mimeMultipart.getCount(); i++) {
          System.out.println("收到郵件的正文:", mimeMultipart.getBodyPart(i).getContent().toString().length());
        }
      }


      System.out.println("--------------------------------分割線(xiàn)----------------------------------------");


      //設(shè)置轉(zhuǎn)發(fā)郵件
      final Properties forwardProps = new Properties();
      forwardProps.put("mail.smtp.host", sendHost);
      forwardProps.put("mail.smtp.port", sendPort);
      final Session forwardSession = Session.getInstance(forwardProps, new Authenticator() {
        @Override
        protected PasswordAuthentication getPasswordAuthentication() {
          return new PasswordAuthentication(username, password);
        }
      });
      // 創(chuàng)建轉(zhuǎn)發(fā)郵件信息
      final Message forwardMail = new MimeMessage(forwardSession);
      // 設(shè)置主題
      forwardMail.setSubject("轉(zhuǎn)發(fā): " + mail.getSubject());
      forwardMail.setFrom(new InternetAddress(SendFrom));
      forwardMail.addRecipient(Message.RecipientType.TO, new InternetAddress(SendTo));
      //創(chuàng)建Multipart的容器
      final Multipart multipart = new MimeMultipart();
      //被轉(zhuǎn)發(fā)的郵件體部分
      final BodyPart messageBodyPart = new MimeBodyPart();
      messageBodyPart.setDataHandler(mail.getDataHandler());
      //添加到Multipart容器
      multipart.addBodyPart(messageBodyPart);
      forwardMail.setContent(multipart);
      //發(fā)送
      Transport.send(forwardMail);
    }


    folder.close(false);//false標(biāo)識(shí)不刪除讀取的郵件
    store.close();
  }

receiveMail方法
以下為參數(shù)說(shuō)明
receiveHost:接收郵件的主機(jī)
receivePort:接收郵件的端口
username:接收郵件的賬號(hào)
password:接收郵件的密碼
這里可以看到,我接收和轉(zhuǎn)發(fā)用的都是一個(gè)username和password,表示我從接收的郵件的這個(gè)賬號(hào),用這個(gè)賬號(hào)轉(zhuǎn)發(fā)給別的郵箱
sendHost:發(fā)送郵件的主機(jī)
sendPort:發(fā)送郵件的端口
SendFrom:從哪個(gè)郵箱進(jìn)行轉(zhuǎn)發(fā)
SendTo:將郵件轉(zhuǎn)發(fā)給該郵箱

清除郵箱

以時(shí)間為限制,刪除一定時(shí)間內(nèi)的郵件

    public static void clearMail(String receiveHost,String receivePort,String receiveProtocol,String username,String password) throws Exception {
        Properties props = new Properties();
        props.put("mail.pop3.host", receiveHost);
        props.put("mail.pop3.port", receivePort);
        Session session = Session.getInstance(props, new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(username, password);
            }
        });
        Store store = session.getStore(receiveProtocol);
//        removeStoreLocal.set(store);
        store.connect();
        Folder folder = store.getFolder("INBOX");
//        removeFolderLocal.set(folder);
        folder.open(Folder.READ_WRITE);
        Calendar calendar = Calendar.getInstance();
        // 搜索7天前收到的的所有郵件,根據(jù)時(shí)間篩選郵件
        calendar.add(Calendar.DAY_OF_MONTH, -7);
        SentDateTerm term = new SentDateTerm(ComparisonTerm.LE, new Date(calendar.getTimeInMillis()));
        Message[] messages = folder.search(term);
        for (int i = 0; i < messages.length; i++) {
//            if(!messages[i].getFolder().isOpen()) //判斷是否open
//                messages[i].getFolder().open(Folder.READ_WRITE);
            messages[i].setFlag(Flags.Flag.DELETED, true);
        }
        folder.close(false);
        store.close();
    }

clearMail方法
以下為對(duì)應(yīng)參數(shù)說(shuō)明
receiveHost:接收郵件的主機(jī)
receivePort:接收郵件的端口
receiveProtocol:接收郵件的協(xié)議
username:接收該郵箱的郵件的賬號(hào)
password:接收該郵箱的郵件的密碼

結(jié)語(yǔ)

以上,就是我通過(guò)springboot(java)使用javamail實(shí)現(xiàn)郵件的接收、轉(zhuǎn)發(fā)、發(fā)送的具體過(guò)程,如后續(xù)有新內(nèi)容將在本文章更新文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-443223.html

到了這里,關(guān)于springboot(java)使用javamail實(shí)現(xiàn)郵件的接收、轉(zhuǎn)發(fā)、發(fā)送、清除的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • kafka接收外部接口的數(shù)據(jù),并實(shí)現(xiàn)轉(zhuǎn)發(fā)

    kafka接收外部接口的數(shù)據(jù),并實(shí)現(xiàn)轉(zhuǎn)發(fā)

    目錄 一、什么是kafka 二、kafka接收外部接口數(shù)據(jù) 三、kafka收到數(shù)據(jù)后轉(zhuǎn)發(fā) 四、kafka總結(jié) ? Kafka是一種分布式流式處理平臺(tái),最初由LinkedIn開(kāi)發(fā)。它設(shè)計(jì)用于高吞吐量、低延遲的數(shù)據(jù)處理,能夠處理大規(guī)模的實(shí)時(shí)數(shù)據(jù)流。Kafka采用發(fā)布-訂閱模式,將數(shù)據(jù)發(fā)布到一個(gè)或多個(gè)主題(

    2024年02月17日
    瀏覽(14)
  • Nginx接收Http協(xié)議請(qǐng)求轉(zhuǎn)發(fā)使用Https協(xié)議

    公司使用阿里的apigateway,規(guī)定不太友好,同是SIT環(huán)境,A系統(tǒng)的SIT1環(huán)境居然不能調(diào)用B系統(tǒng)的SIT2環(huán)境的接口。因?yàn)楦鱾€(gè)系統(tǒng)之間部署的SIT環(huán)境數(shù)量不同A系統(tǒng)可能只有1套,B系統(tǒng)可能有8套,這樣的話(huà),可能會(huì)隨時(shí)切換調(diào)用B系統(tǒng)的環(huán)境,管理員不允許,于是想著用Nginx做下轉(zhuǎn)發(fā)。

    2024年02月08日
    瀏覽(28)
  • SpringBoot整合JavaMail

    SpringBoot整合JavaMail

    介紹協(xié)議 導(dǎo)入坐標(biāo) 添加配置 開(kāi)啟定時(shí)任務(wù)功能

    2024年02月15日
    瀏覽(15)
  • Java使用Netty實(shí)現(xiàn)端口轉(zhuǎn)發(fā)&Http代理&Sock5代理服務(wù)器

    這里總結(jié)整理了之前使用Java寫(xiě)的端口轉(zhuǎn)發(fā)、Http代理、Sock5代理程序,放在同一個(gè)工程中,方便使用。 開(kāi)發(fā)語(yǔ)言:Java 開(kāi)發(fā)框架:Netty 端口轉(zhuǎn)發(fā): HTTP代理服務(wù)器,支持賬號(hào)密碼認(rèn)證 Sock5代理服務(wù)器,支持賬號(hào)密碼認(rèn)證 支持連接后端時(shí)直接連接或采用代理連接,也后端代理連接認(rèn)

    2024年01月25日
    瀏覽(23)
  • Java發(fā)送郵件-工具類(lèi)-基于springboot

    Java發(fā)送郵件-工具類(lèi)-基于springboot

    那么,廢話(huà)少說(shuō),直接上代碼。 1. 目錄結(jié)構(gòu) ?重點(diǎn)是那幾個(gè)帶mail的,其他文件不用管。 2. pom 其他文件都是基礎(chǔ)的,主要是引入這個(gè)mail。 我這個(gè)版本比較老舊,更新一下也是可以的。 3. 主要代碼 先搞一個(gè)郵件實(shí)體類(lèi) 再搞一個(gè)郵箱實(shí)體類(lèi) 最后再搞一個(gè)發(fā)送郵件的工具類(lèi) 最

    2024年02月11日
    瀏覽(17)
  • 使用Java服務(wù)器實(shí)現(xiàn)UDP消息的發(fā)送和接收(多線(xiàn)程)

    使用Java服務(wù)器實(shí)現(xiàn)UDP消息的發(fā)送和接收(多線(xiàn)程)

    在本篇博客中,我們將介紹如何使用Java服務(wù)器來(lái)實(shí)現(xiàn)UDP消息的發(fā)送和接收,并通過(guò)多線(xiàn)程的方式來(lái)處理并發(fā)請(qǐng)求。UDP(User Datagram Protocol)是一種無(wú)連接、不可靠的傳輸協(xié)議,適合于實(shí)時(shí)性要求高的應(yīng)用場(chǎng)景,如實(shí)時(shí)游戲、語(yǔ)音通信等。 步驟: 首先,我們需要導(dǎo)入Java提供的

    2024年02月12日
    瀏覽(37)
  • RabbitMQ系列(5)--使用Java實(shí)現(xiàn)RabbitMQ的消費(fèi)者接收消息

    RabbitMQ系列(5)--使用Java實(shí)現(xiàn)RabbitMQ的消費(fèi)者接收消息

    前言:先簡(jiǎn)單了解RabbitMQ的工作過(guò)程,方便后續(xù)開(kāi)發(fā)理清思路 簡(jiǎn)略: 詳細(xì): 1、新建消費(fèi)者類(lèi) 效果圖: 2、編寫(xiě)消費(fèi)者消費(fèi)消息的代碼 例: 3、查看代碼運(yùn)行結(jié)果 運(yùn)行代碼后如果有輸出生產(chǎn)者發(fā)送的”Hello World”信息,則證明消費(fèi)者消費(fèi)消息成功 4、在web頁(yè)面上查看隊(duì)列的消

    2024年02月06日
    瀏覽(19)
  • java后端使用websocket實(shí)現(xiàn)與客戶(hù)端之間接收及發(fā)送消息

    客戶(hù)端請(qǐng)求websocket接口,連接通道=》我這邊業(yè)務(wù)成功客戶(hù)端發(fā)消息=》客戶(hù)端自動(dòng)刷新。 接口:ws://localhost:8080/websocket/xx 經(jīng)測(cè)試,成功 如果是線(xiàn)上服務(wù)器連接,則需要在nginx里配置websocket相關(guān)內(nèi)容,再重啟nginx,代碼如下 本地連接的時(shí)候用的是ws://,因?yàn)槭莌ttp鏈接,但是如果是

    2024年02月16日
    瀏覽(26)
  • 在springBoot中使用JWT實(shí)現(xiàn)1.生成token,2.接收前端token進(jìn)行身份認(rèn)證,3.通過(guò)token獲取對(duì)象信息

    在springBoot中使用JWT實(shí)現(xiàn)1.生成token,2.接收前端token進(jìn)行身份認(rèn)證,3.通過(guò)token獲取對(duì)象信息

    第一步:引入依賴(lài) 第二步:創(chuàng)建工具類(lèi) 在until包下創(chuàng)建TokenUntil類(lèi),用于生成token 利用id,和password作為參數(shù)生成token JWt為這個(gè)包下的對(duì)象 第三步:token使用 在向前端返回的數(shù)據(jù)對(duì)象中添加token屬性 ?是serve層中調(diào)用工具類(lèi)方法將生成的token放到返回的數(shù)據(jù)中 注意:這里獲取到

    2024年02月04日
    瀏覽(94)
  • 不良郵件過(guò)濾系統(tǒng) 畢業(yè)設(shè)計(jì) JAVA+Vue+SpringBoot+MySQL

    不良郵件過(guò)濾系統(tǒng) 畢業(yè)設(shè)計(jì) JAVA+Vue+SpringBoot+MySQL

    作者主頁(yè) :Designer 小鄭 作者簡(jiǎn)介 :3年JAVA全棧開(kāi)發(fā)經(jīng)驗(yàn),專(zhuān)注JAVA技術(shù)、系統(tǒng)定制、遠(yuǎn)程指導(dǎo),致力于企業(yè)數(shù)字化轉(zhuǎn)型,CSDN博客專(zhuān)家,阿里云社區(qū)專(zhuān)家博主,藍(lán)橋云課講師。 項(xiàng)目編號(hào): S 089 ,文末獲取源碼。 color{red}{項(xiàng)目編號(hào):S089,文末獲取源碼。} 項(xiàng)目編號(hào): S 089 ,文

    2024年02月19日
    瀏覽(15)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包