【开源】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.mfbz.cn/a/470782.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[Qt项目实战]Qt实现美松标签打印机标签二维码打印(QR混排模式+页打印模式)

1、硬件信息、环境参数及配套资料 1.1 打印机信息及开发环境 打印机 美松标签打印机串口/USB通讯Qt5.9 64位程序 1.2 打印机配套开发资料 打印机主要配套测试工具、开发SDK及驱动等&#xff0c;均由厂家提供。 开发Demo及动态库&#xff1a;MsPrintSDK-DLL-V2.2.2.5 链接&…

3、java虚拟机-类的生命周期-初始化阶段(与程序员有关)

一 、静态代码块执行顺序和字节码文件中的执行顺序以及什么赋值。 类的生命周期-初始化阶段-被static所修饰的常量才会被赋予值 初始化阶段-代码中静态代码块和静态变量的顺序和字节码中的执行顺序是一致的。 二、4种情况下&#xff0c;类会被初始化。 1、怎样查看类是…

阿里云部署MySQL、Redis、RocketMQ、Nacos集群

文章目录 &#x1f50a;博主介绍&#x1f964;本文内容MySQL集群配置云服务器选购CPU选择内存选择云盘选择ESSD AutoPL云盘块存储性能&#xff08;ESSD&#xff09; 镜像选择带宽选择密码配置注意事项 搭建宝塔面板方便管理云服务器云服务器的安全组安装docker和docker-compose…

Go语言学习13-常见软件架构的实现

Go语言学习13-常见软件架构的实现 架构模式 An architectural pattern is a general, reusable solution to a commonly occurring problem in software architectural within a given context. ——wikipedia Pipe-Filter 架构 Pipe-Filter 模式 非常适合于数据处理及数据分…

taro之Picker,PickerView基础用法

1.Picker 直接上代码 import Taro,{Component} from "tarojs/taro"; import {View,Picker} from tarojs/components import { AtIcon } from taro-ui import { putKey } from /src/utils/storage-utilsclass AgriculturePolicy extends Component{constructor (prop…

su: authentication failure 解决方法

产生问题的原因&#xff1a;使用su和sudo是有区别的&#xff0c;root的密码可能是原始的密码&#xff0c;你现在用户的密码大概率是更改过的 解决办法&#xff1a; 在Linux上切换root时&#xff0c;密码正确。。但提示&#xff1a;su: authentication failure ->sudo pa…

统计学基础概念和在AI中的应用

基本概念 统计学是一门研究数据收集、分析、解释和展示的科学&#xff0c;它提供了一套方法论&#xff0c;用于理解数据并从数据中得出结论。统计学在各个领域都有应用&#xff0c;包括经济学、医学、工程学、社会科学等。以下是统计学的一些基本概念&#xff1a; 描述性统计…

wireshark数据捕获实验简述

Wireshark是一款开源的网络协议分析工具&#xff0c;它可以用于捕获和分析网络数据包。是一款很受欢迎的“网络显微镜”。 实验拓扑图&#xff1a; 实验基础配置&#xff1a; 服务器&#xff1a; ip:172.16.1.88 mask:255.255.255.0 r1: sys sysname r1 undo info enable in…

B站python爬虫课程笔记(Q16-)

下面是学习的网址&#xff1a; ​​​​​​【Python爬虫】 16、捕捉异常try&except语句的一些问题 1&#xff09;一些常见的异常类型 IndexError索引错误ZeroDivisionError除零错误FileNotFindError找不到文件错误TypeError类型错误KeyError键错误ValueError值错误Ind…

代理IP品质对Tik Tok代理的重要性

随着Tik Tok的迅速崛起&#xff0c;越来越多的人开始关注如何透过Tik Tok进行行销和推广。其中&#xff0c;使用Tik Tok代理程式是常见的方法。 然而&#xff0c;在选择和使用代理时&#xff0c;IP品质是一个不可忽视的因素。本文将探讨IP品质对Tik Tok代理的重要性&#xff0…

【征稿进行时|见刊、检索快速稳定】2024年区块链、物联网与复合材料与国际学术会议 (ICBITC 2024)

【征稿进行时|见刊、检索快速稳定】2024年区块链、物联网与复合材料与国际学术会议 (ICBITC 2024) 大会主题: (主题包括但不限于, 更多主题请咨询会务组苏老师) 区块链&#xff1a; 区块链技术和系统 分布式一致性算法和协议 块链性能 信息储存系统 区块链可扩展性 区块…

Springboot笔记-04

1.PropertySource&ImportResource&Bean PropertySource&#xff1a;加载指定的配置文件&#xff0c;只能用于properties文件&#xff0c;不支持yml文件&#xff1b; 以person为例子: ConfigurationProperties:告诉springboot将本类中所有属性和配制文件相关的配制进行…

docker入门(一)—— docker概述

docker 概述 docker 官网&#xff1a;http://www.docker.com 官网文档&#xff1a; https://docs.docker.com/get-docker/ Docker Hub官网&#xff1a;https://hub.docker.com &#xff08;仓库&#xff09; 什么是 docker docker 是一个开源的容器化平台&#xff0c;可以…

ARM Cortex-R82处理器在压缩SSD场景的应用

ScaleFlux公司宣布在其下一代企业级SSD控制器产品线中采用Arm公司的Cortex-R82处理器。这一决策旨在应对企业环境中对高带宽存储解决方案日益增长的需求&#xff0c;并通过提升数据传输速度和效率来满足市场期待。 Arm Cortex-R82处理器是Arm公司迄今为止性能最强的实时处理器…

maven手动上传的第三方包 打包项目报错 Could not find xxx in central 解决办法

背景: 在Maven私服手动上传了第三方的jar包, 只有jar包, 没有pom文件, 项目在ide中可以正常编译启动,但打包报错无法找到jar包 解决办法: 上传jar包的时候, 点击生成pom. 则打包的时候不会报错

2.28线程

注意被抢占时是返回原队列&#xff0c;优先级不变。越往下优先级越小。往下没有优先级时&#xff0c;在最低的优先级队列里循环 到达了不一定会被服务&#xff0c;会进入就绪态进行等待 。核心等式就是周转时间运行时间等待时间&#xff0c;带权就是周转/运行&#xff0c; 随着…

wayland(xdg_wm_base) + egl + opengles 使用 Assimp 加载带光照信息的材质文件Mtl 实现光照贴图的最简实例(十七)

文章目录 前言一、3d 立方体 model 属性相关文件1. cube1.obj2. cube1.Mtl3. 纹理图片 cordeBouee4.jpg二、实现光照贴图的效果1. 依赖库和头文件1.1 assimp1.2 stb_image.h2. egl_wayland_obj_cube1.cpp3. Matrix.h 和 Matrix.cpp4. xdg-shell-client-protocol.h 和 xdg-shell…

无人机助力违法毒品种植,基于轻量级YOLOv5n开发构建无人机航拍场景下的农村田园场景下非法种植罂粟花检测预警识别系统

打击毒品人人有责&#xff0c;毒品带来的危害是人尽皆知的&#xff0c;我们不仅自身要严厉拒绝接触任何形式的毒品&#xff0c;更要言传身教告诫他人不要与任何形式的任何渠道的毒品有关联&#xff0c;但是在实际生活中&#xff0c;在一些偏远的乡村、田园、山丘、村落等地方&a…

网络安全的几个关键领域

网络安全是一个复杂且多维度的领域&#xff0c;涵盖了多个关键领域&#xff0c;涉及到信息保护、网络防护、应用安全、用户教育以及物理安全等多个方面。这些关键领域相互交织&#xff0c;共同构成了网络安全这一宏大且细致入微的领域。 今天德迅云安全就分享下网络安全的几个…

STP环路避免实验(华为)

思科设备参考&#xff1a;STP环路避免实验&#xff08;思科&#xff09; 一&#xff0c;技术简介 Spanning Tree Protocol&#xff08;STP&#xff09;&#xff0c;即生成树协议&#xff0c;是一种数据链路层协议。主要作用是防止二层环路&#xff0c;并自适应网络变化和故障…