Vue+SpringBoot打造不良郵件過濾系統

在這里插入圖片描述


目錄

  • 一、摘要
    • 1.1 項目介紹
    • 1.2 項目錄屏
  • 二、功能模塊
    • 2.1 系統用戶模塊
    • 2.2 收件箱模塊
    • 2.3 發件箱模塊
    • 2.4 垃圾箱模塊
    • 2.5 回收站模塊
    • 2.6 郵箱過濾設置模塊
  • 三、實體類設計
    • 3.1 系統用戶
    • 3.2 郵件
    • 3.3 其他實體
  • 四、系統展示
  • 五、核心代碼
    • 5.1 查詢收件箱檔案
    • 5.2 查詢回收站檔案
    • 5.3 新增郵件的附件
    • 5.4 新增白名單檔案
    • 5.5 增改黑名單檔案
  • 六、免責說明


一、摘要

1.1 項目介紹

基于JAVA+Vue+SpringBoot+MySQL的不良郵件過濾系統,包含了發件箱、收件箱、垃圾箱、回收站、黑名單、白名單和關鍵詞過濾模塊,還包含系統自帶的用戶管理、班級管理、角色管理、菜單管理、日志管理、數據字典管理、文件管理、圖表展示等基礎模塊,不良郵件過濾系統基于角色的訪問控制,給郵件管理員、普通用戶使用,可將權限精確到按鈕級別,您可以自定義角色并分配權限,系統適合設計精確的權限約束需求。

1.2 項目錄屏


二、功能模塊

在這里插入圖片描述

2.1 系統用戶模塊

系統用戶模塊包含了系統登陸用戶的檔案維護。我們需要建立一個檔案來維護用戶,包括用戶的郵箱地址、發信人名字、手機號、身份證、權限等數據。

在這里插入圖片描述

2.2 收件箱模塊

收件箱模塊包含了系統用戶正常收到的所有郵件,用戶可以在此模塊中查詢自己收到的電子郵件。

在這里插入圖片描述

2.3 發件箱模塊

發件箱模塊包含了電子郵件的發送界面,還包括了系統用戶歷史發送的郵件檔案,和未發出的草稿郵件信息。

在這里插入圖片描述

2.4 垃圾箱模塊

垃圾箱模塊包含了系統用戶收到的垃圾信息。這些郵件是被用戶設置的過濾規則所過濾的郵件檔案,用戶可以在垃圾箱模塊中查詢它們。

在這里插入圖片描述

2.5 回收站模塊

系統用戶可以主動刪除收到的郵件,用戶操作刪除后,郵件會自動進入到回收站作為緩沖區。用戶如果在可以在回收站再次刪除文件,即徹底刪除郵件信息。

在這里插入圖片描述

2.6 郵箱過濾設置模塊

系統用戶可以自定義配置適合自己的過濾規則,如設置黑名單防止騷擾,設置白名單避免誤傷,設置關鍵詞以便更精確的過濾郵件。

在這里插入圖片描述


三、實體類設計

3.1 系統用戶

系統用戶登錄模塊管理郵件系統的登錄帳戶,用戶信息包括帳號、性別、手機號碼、生日、身份證號碼、電子郵件、注冊日期、備注等其中,賬號是系統用戶的決定因素。

在這里插入圖片描述

3.2 郵件

發件箱、收件箱、垃圾箱、回收站模塊分別是對郵件進行記錄并管理,其中郵件的信息包括了郵件的郵件ID、發件人ID、發件人姓名、收件人ID、收件人姓名、郵件標題、郵件內容、附件、備注等,其中郵件ID是郵件的確定性因素。
在這里插入圖片描述

3.3 其他實體

黑名單表,用于存儲系統用戶的黑名單數據,包括的拉黑的規則名稱、郵箱地址、生效用戶ID和備注信息。
白名單表,用于存儲系統用戶的白名單數據,包括的拉白的規則名稱、郵箱地址、生效用戶ID和備注信息。
關鍵詞表,用于存儲系統用戶的配置的過濾關鍵詞,包括的關鍵詞、生效用戶ID這兩個字段。


四、系統展示

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述


五、核心代碼

5.1 查詢收件箱檔案

@RequestMapping(value = "/getByShouPage", method = RequestMethod.GET)
@ApiOperation(value = "查詢收件箱檔案")
public Result<IPage<MailArchives>> getByShouPage(@ModelAttribute MailArchives mailArchives ,@ModelAttribute PageVo page){User currUser = securityUtil.getCurrUser();QueryWrapper<MailArchives> qw = new QueryWrapper<>();qw.eq("to_id",currUser.getId());if(!ZwzNullUtils.isNull(mailArchives.getFromUser())) {qw.like("from_user",mailArchives.getFromUser());}if(mailArchives.getStatus() > 0) {qw.eq("status",mailArchives.getStatus() - 1);}qw.ne("status",3);IPage<MailArchives> data = iMailArchivesService.page(PageUtil.initMpPage(page),qw);return new ResultUtil<IPage<MailArchives>>().setData(data);
}

5.2 查詢回收站檔案

@RequestMapping(value = "/getByLaJiPage", method = RequestMethod.GET)
@ApiOperation(value = "查詢回收站檔案")
public Result<IPage<MailArchives>> getByLaJiPage(@ModelAttribute MailArchives mailArchives ,@ModelAttribute PageVo page){User currUser = securityUtil.getCurrUser();QueryWrapper<MailArchives> qw = new QueryWrapper<>();qw.eq("to_id",currUser.getId());if(!ZwzNullUtils.isNull(mailArchives.getFromUser())) {qw.like("from_user",mailArchives.getFromUser());}qw.eq("status",3);IPage<MailArchives> data = iMailArchivesService.page(PageUtil.initMpPage(page),qw);return new ResultUtil<IPage<MailArchives>>().setData(data);
}

5.3 新增郵件的附件

@RequestMapping(value = "/addFile", method = RequestMethod.GET)
@ApiOperation(value = "新增郵件的附件")
public Result<Object> addFile(@RequestParam String mailId,@RequestParam String fileId){String[] fileSplit = fileId.split("/");File file = iFileService.getById(fileSplit[fileSplit.length - 1]);if(file == null) {return ResultUtil.error("附件文件不存在");}MailArchives mailArchives = iMailArchivesService.getById(mailId);if(mailArchives == null) {return ResultUtil.error("郵件不存在");}MailFile mailFile = new MailFile();mailFile.setFileId(fileId);mailFile.setMailId(mailId);mailFile.setFileSize(file.getSize());mailFile.setTitle(file.getName());iMailFileService.saveOrUpdate(mailFile);return ResultUtil.success();
}

5.4 新增白名單檔案

@RequestMapping(value = "/insert", method = RequestMethod.POST)
@ApiOperation(value = "新增白名單檔案")
public Result<Whitelist> insert(Whitelist whitelist){if(ZwzNullUtils.isNull(whitelist.getMailAddress())) {return ResultUtil.error("白名單郵箱不能為空");}QueryWrapper<User> userQw = new QueryWrapper<>();userQw.eq("email",whitelist.getMailAddress());User findUser = iUserService.getOne(userQw);if(findUser == null) {return ResultUtil.error("非系統用戶郵箱");}whitelist.setMailId(findUser.getId());User currUser = securityUtil.getCurrUser();whitelist.setUserId(currUser.getId());iWhitelistService.saveOrUpdate(whitelist);return new ResultUtil<Whitelist>().setData(whitelist);
}

5.5 增改黑名單檔案

@RequestMapping(value = "/insert", method = RequestMethod.POST)
@ApiOperation(value = "新增黑名單檔案")
public Result<Blacklist> insert(Blacklist blacklist){if(ZwzNullUtils.isNull(blacklist.getMailAddress())) {return ResultUtil.error("黑名單郵箱不能為空");}QueryWrapper<User> userQw = new QueryWrapper<>();userQw.eq("email",blacklist.getMailAddress());User findUser = iUserService.getOne(userQw);if(findUser == null) {return ResultUtil.error("非系統用戶郵箱");}blacklist.setMailId(findUser.getId());User currUser = securityUtil.getCurrUser();blacklist.setUserId(currUser.getId());iBlacklistService.saveOrUpdate(blacklist);return new ResultUtil<Blacklist>().setData(blacklist);
}

六、免責說明

  • 本項目僅供個人學習使用,商用授權請聯系博主,否則后果自負。
  • 博主擁有本軟件構建后的應用系統全部內容所有權及獨立的知識產權,擁有最終解釋權。
  • 如有問題,歡迎在倉庫 Issue 留言,看到后會第一時間回復,相關意見會酌情考慮,但沒有一定被采納的承諾或保證。

下載本系統代碼或使用本系統的用戶,必須同意以下內容,否則請勿下載!

  1. 出于自愿而使用/開發本軟件,了解使用本軟件的風險,且同意自己承擔使用本軟件的風險。
  2. 利用本軟件構建的網站的任何信息內容以及導致的任何版權糾紛和法律爭議及后果和博主無關,博主對此不承擔任何責任。
  3. 在任何情況下,對于因使用或無法使用本軟件而導致的任何難以合理預估的損失(包括但不僅限于商業利潤損失、業務中斷與業務信息丟失),博主概不承擔任何責任。
  4. 必須了解使用本軟件的風險,博主不承諾提供一對一的技術支持、使用擔保,也不承擔任何因本軟件而產生的難以預料的問題的相關責任。

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/711062.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/711062.shtml
英文地址,請注明出處:http://en.pswp.cn/news/711062.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux學習-etcdctl安裝

etcdctl3.5下載鏈接 1. 先通過上面鏈接下載gz包2. 解壓 [rootk8s-master ~]# tar xf etcd-v3.5.11-linux-amd64.tar.gz [rootk8s-master etcd-v3.5.11-linux-amd64]# ls Documentation etcd etcdctl etcdutl README-etcdctl.md README-etcdutl.md README.md READMEv2-e…

圖像分割 - 查找圖像的輪廓(cv2.findContours函數)

1、前言 輪廓,是指圖像中或者物體的外邊緣線條。在簡單的幾何圖形中,圖形的輪廓是由平滑的線條構成,容易被識別。但不規則的圖形或者生活中常見的物體輪廓復雜,識別起來比較困難 2、findContours函數 這里先介紹函數的參數,具體的含義會在下面實驗中闡述 opencv 提供的輪…

『大模型筆記』自用的“科技文章翻譯 GPT”和它的 Prompt

自用的“科技文章翻譯 GPT”和它的 Prompt 你是一位精通簡體中文的專業翻譯,尤其擅長將專業學術論文翻譯成淺顯易懂的科普文章。請你幫我將以下英文段落翻譯成中文,風格與中文科普讀物相似。規則: - 翻譯時要準確傳達原文的事實和背景。 - 即使上意譯也要保留原始段落格式,…

每天一個數據分析題(一百八十四)

在下列哪種情況下線性回歸模型不適合代替邏輯回歸模型&#xff1f; A. 預測的目標變量是連續型的并且分布范圍不受限制 B. 預測的目標變量是二元的并且服從二項分布 C. 自變量與因變量之間的關系可以假設為線性關系 D. 需要預測客戶的具體購買金額 題目來源于CDA模擬題庫 …

React入門之React_渲染基礎用法和class實例寫法

渲染元素 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>04元素渲染</title><script src&…

什么是RPC?談談你對RPC的理解

RPC&#xff08;Remote Procedure Call&#xff0c;遠程過程調用&#xff09;是一種計算機通信協議。它允許一臺計算機&#xff08;客戶端&#xff09;通過網絡調用另一臺計算機&#xff08;服務器&#xff09;上的程序&#xff0c;并等待該程序的結果返回。RPC抽象了網絡通信的…

go mod中如何解決 xxx/yyy/lib@v1.1.0: unrecognized import path

需要檢查的幾個地方 這個錯誤通常出現在 Go 模塊系統無法找到指定版本的模塊時。有幾種可能的原因和解決方法&#xff1a; 模塊未被發布或標記&#xff1a; 確保 xxx/yyy/lib 模塊的版本 v1.1.0 已經被正確地發布或標記。你可以在對應的 GitLab 倉庫中查看是否存在 v1.1.0 標簽…

2024-2-29-網絡編程作業

1>TCP 源代碼: 服務器端&#xff1a; #include <myhead.h> #define SER_IP "10.168.1.111" #define SER_PORT 8888 #define MAXSIZE 128 int main(int argc, char const *argv[]) {int sfd socket(AF_INET, SOCK_STREAM, 0);struct sockaddr_in sin;sin…

代碼隨想錄算法訓練營|day47

第九章 動態規劃 198.打家劫舍213.打家劫舍II337.打家劫舍III代碼隨想錄文章詳解 198.打家劫舍 dp[i]表示偷第i家及之前所能獲取的最大金額 偷第i家&#xff1a;dp[i] dp[i-2]nums[i]&#xff0c;不偷第i家&#xff1a;dp[i] dp[i-1] func rob(nums []int) int {if len(num…

RDD簡介與基礎編程

1. 什么是RDD&#xff1f; RDD&#xff08;Resilient Distributed Dataset&#xff09;叫做彈性分布式數據集&#xff0c;是Spark中最基本的數據處理模型。在代碼中&#xff0c;RDD是一個抽象類&#xff0c;他代表著一個彈性的、不可變的、可分區的、里面的元素可并行計算的集…

android TextView 實現富文本顯示

android TextView 實現富文本顯示&#xff0c;實現抖音直播間公屏消息案例 使用&#xff1a; val tvContent: TextView helper.getView(R.id.tvContent)//自己根據UI業務要求&#xff0c;可以控制 圖標顯示 大小val levelLabel MyImgLabel( bitmap 自己業務上的bitmap )va…

第零章_計算機導論

0.1 計算機&#xff1a;輔助人腦的好工具 所謂的計算機就是一種計算器&#xff0c;而計算器其實是:『接受用戶輸入指令與數據&#xff0c;經由中央處理器的數學與邏輯單元運算處理后&#xff0c;以產生或儲存成有用的信息』。因此&#xff0c;只要有輸入設備(不管是鍵盤還是觸摸…

UE5基于RumtimeFBXImport插件使用C++加載服務器上fbx文件方法

UE5的RumtimeFBXImport插件其實只能加載本機的fbx文件&#xff0c;要加載服務器上的fbx文件的話&#xff0c;需要先將該fbx文件下載到本地&#xff0c;然后再使用RumtimeFBXImport插件加載。 示例文件如下&#xff1a; #include "Loader/WebLoader.h" #include &quo…

HTML5:七天學會基礎動畫網頁4

backgorund-size 值與說明 length(單位像素):設置背景圖片高度和寬度&#xff0c;第一個值設置寬度&#xff0c;第二個值設置高度&#xff0c;如果只給出一個值&#xff0c;第二個是設置為auto。 percentage(百分比):以父元素的百分比來設置背景圖像的寬度和高度&#xff0c…

CSS技巧:實現兩個div在同一行顯示的方法

css如何讓兩個div在同一行顯示 - web開發 - 億速云 在Web開發中&#xff0c;經常遇到需要將多個元素水平排列在同一行的情況。其中一個常見的需求是將兩個div元素放置在同一行上&#xff0c;使它們并排顯示。在本文中&#xff0c;我們將介紹幾種實現這一效果的CSS方法。 1. 使…

TypeScript基礎知識:類型推導和上下文類型化

在 TypeScript 中&#xff0c;類型推導和上下文類型化是兩個重要的概念。它們使得代碼編寫更加簡潔、可讀性更高&#xff0c;并且幫助我們避免冗余的類型注解。本文將深入探討這兩個概念&#xff0c;并通過示例代碼演示它們的用法和好處。 一、類型推導 類型推導是 TypeScript…

day06_菜單管理(查詢菜單,添加菜單,添加子菜單,修改菜單,刪除菜單,角色分配菜單,查詢菜單,保存菜單,動態菜單)

文章目錄 1 菜單管理1.1 表結構介紹1.2 查詢菜單1.2.1 需求說明1.2.2 頁面制作1.2.3 后端接口SysMenuSysMenuControllerSysMenuServiceMenuHelperSysMenuMapperSysMenuMapper.xml 1.2.4 前端對接sysMenu.jssysMenu.vue 1.3 添加菜單1.3.1 需求說明1.3.3 頁面制作1.3.3 后端接口…

【git隨筆,日常積累】

Git常用基礎 branch 查看所有分支&#xff1a; git branch -a切換到分支&#xff1a;git checkout develop創建分支并切換到&#xff1a;git checkout -b develop創建一個新分支&#xff1a;git checkout --orphan new_branch --orphan 選項用于創建一個沒有歷史記錄的分支 刪…

騰訊云安裝MYSQL遠程連接不上解決方案

推薦安裝步驟博客&#xff0c;寫的很詳細&#xff0c;如果不會安裝的話&#xff0c;可以根據安裝步驟一直走。 Windows10下超詳細Mysql安裝_win10安裝mysql-CSDN博客 修改 my.cnf或者my.ini 找到里面bind-address將bind-address 127.0.0.1設置成bind-address 0.0.0.0&#x…

AI英語學習助手-幫助建立詞庫和句子-極簡安裝(python基于Django和 OpenAI GPT API的網站程序)

AI英語學習助手-幫助建立詞庫和句子-極簡安裝&#xff08;python基于Django和 OpenAI GPT API的網站程序&#xff09; 學了很久的英語&#xff0c;但是發現還是被單詞困住了&#xff0c;天天查句子查單詞太麻煩&#xff0c;現在有了Chat GPT&#xff0c;能夠很好得幫助學習英語…