【开源】SpringBoot框架开发不良邮件过滤系统


目录

  • 一、摘要
    • [1.1 项目介绍](#1.1 项目介绍)
    • [1.2 项目录屏](#1.2 项目录屏)
  • 二、功能模块
    • [2.1 系统用户模块](#2.1 系统用户模块)
    • [2.2 收件箱模块](#2.2 收件箱模块)
    • [2.3 发件箱模块](#2.3 发件箱模块)
    • [2.4 垃圾箱模块](#2.4 垃圾箱模块)
    • [2.5 回收站模块](#2.5 回收站模块)
    • [2.6 邮箱过滤设置模块](#2.6 邮箱过滤设置模块)
  • 三、实体类设计
    • [3.1 系统用户](#3.1 系统用户)
    • [3.2 邮件](#3.2 邮件)
    • [3.3 其他实体](#3.3 其他实体)
  • 四、系统展示
  • 五、核心代码
    • [5.1 查询收件箱档案](#5.1 查询收件箱档案)
    • [5.2 查询回收站档案](#5.2 查询回收站档案)
    • [5.3 新增邮件的附件](#5.3 新增邮件的附件)
    • [5.4 新增白名单档案](#5.4 新增白名单档案)
    • [5.5 增改黑名单档案](#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 查询收件箱档案

java 复制代码
@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 查询回收站档案

java 复制代码
@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 新增邮件的附件

java 复制代码
@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 新增白名单档案

java 复制代码
@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 增改黑名单档案

java 复制代码
@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. 必须了解使用本软件的风险,博主不承诺提供一对一的技术支持、使用担保,也不承担任何因本软件而产生的难以预料的问题的相关责任。
相关推荐
程序猿麦小七2 分钟前
基于springboot的景区网页设计与实现
java·spring boot·后端·旅游·景区
weisian1519 分钟前
认证鉴权框架SpringSecurity-2--重点组件和过滤器链篇
java·安全
蓝田~10 分钟前
SpringBoot-自定义注解,拦截器
java·spring boot·后端
theLuckyLong12 分钟前
SpringBoot后端解决跨域问题
spring boot·后端·python
A陈雷12 分钟前
springboot整合elasticsearch,并使用docker desktop运行elasticsearch镜像容器遇到的问题。
spring boot·elasticsearch·docker
.生产的驴13 分钟前
SpringCloud Gateway网关路由配置 接口统一 登录验证 权限校验 路由属性
java·spring boot·后端·spring·spring cloud·gateway·rabbitmq
小扳17 分钟前
Docker 篇-Docker 详细安装、了解和使用 Docker 核心功能(数据卷、自定义镜像 Dockerfile、网络)
运维·spring boot·后端·mysql·spring cloud·docker·容器
v'sir26 分钟前
POI word转pdf乱码问题处理
java·spring boot·后端·pdf·word
李少兄31 分钟前
解决Spring Boot整合Redis时的连接问题
spring boot·redis·后端
提高记忆力35 分钟前
SpringBoot整合FreeMarker生成word表格文件
java·spring