当前位置: 首页 > news >正文

群控系统服务端开发模式-应用开发-邮箱配置功能开发

        邮箱配置主要是将管理员数据做归属。具体见下图:

一、创建表

        1、语句

CREATE TABLE `cluster_control`.`nc_param_mail`  (`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '编号',`title` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '邮箱服务标题',`username` varchar(250) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '发件人邮箱',`smtp_address` varchar(250) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '邮箱服务地址',`smtp_port` smallint(5) UNSIGNED NOT NULL DEFAULT 0 COMMENT '邮箱服务端口',`smtp_password` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '邮箱服务授权码',`smtp_lifespan` int(11) UNSIGNED NOT NULL DEFAULT 0 COMMENT '有效期',`smtp_protocol` varchar(5) CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '邮箱服务协议',`status` tinyint(1) UNSIGNED NOT NULL DEFAULT 1 COMMENT '状态 1:启用 0:禁用',`create_time` datetime NOT NULL COMMENT '创建时间',`update_time` datetime NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',PRIMARY KEY (`id`),UNIQUE INDEX `m_t`(`title`) USING BTREE,
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '邮箱配置表';

        2、表结构

二、邮箱配置路由管理

        在根目录下route文件夹中app.php文件中,添加邮箱配置功能路由,代码如下:

    // 邮箱配置操作Route::get('mail/get_list','param.Mail/getList');// 获取邮箱配置列表Route::post('mail/get_all','param.Mail/getAll');// 获取所有邮箱配置数据Route::post('mail/get_info','param.Mail/getInfo');// 获取单个邮箱配置数据Route::post('mail/save_info','param.Mail/saveInfo');// 保存邮箱配置数据Route::post('mail/status_info','param.Mail/statusInfo');// 启禁用邮箱配置数据Route::post('mail/delete_info','param.Mail/deleteInfo');// 删除邮箱配置数据

三、邮箱配置控制管理

        在根目录下的app文件夹下的controller文件夹中,创建文件夹并命名param,在param文件夹中接着创建邮箱配置控制器并命名为Mail。具体代码如下:

<?php
/*** 邮箱配置控制管理* User: 龙哥·三年风水* Date: 2024/11/28* Time: 11:10*/
namespace app\controller\param;
use app\controller\Base;
use app\model\param\Mail as MailModel;
class Mail extends Base
{// 分页数据public function getList(){$param = $this->request->param();$where = [];if (!empty($param['id'])) $where[] = ['id', '=', $param['id']];if (!empty($param['title'])) $where[] = ['title', 'LIKE', $param['title'] . '%'];if (!empty($param['username'])) $where[] = ['username', 'LIKE', $param['username'] . '%'];$resList = MailModel::getRedisList($where , [$param['currentPage'], $param['currentSize']]);$list = [];foreach ($resList['info'] as $k => $v) {$list[$k] = MailModel::dataFind(['id' => $v],'id,title,username,smtp_address,smtp_port,smtp_lifespan,smtp_protocol,status,create_time,update_time',true);}$res['list'] = $list;$res['meat'] = $resList['page'];return succ('操作成功',$res);}// 所有数据public function getAll(){$list = MailModel::getAll(['status' => 1],'id,title','create_time DESC');return succ('操作成功',$list);}// 单个数据public function getInfo(){$id = $this->request->param('id', 0);if(empty($id))return err('主键参数必须上传');$data = MailModel::dataFind(['id' => $id], 'id,title,username,smtp_address,smtp_port,smtp_password,smtp_lifespan,smtp_protocol,status',true);return succ('操作成功',$data);}// 保存数据public function saveInfo(){$this->checkRoleMenu('ParamMailIndexSave');//验证权限$param = $this->request->param();//接收参数$validate = new \app\validate\param\Mail;if (!$validate->check($param)) return err($validate->getError());//验证参数$data['title'] = $param['title'];$data['username'] = $param['username'];$data['smtp_address'] = $param['smtp_address'];$data['smtp_port'] = $param['smtp_port'];$data['smtp_password'] = $param['smtp_password'];$data['smtp_lifespan'] = $param['smtp_lifespan'];$data['smtp_protocol'] = $param['smtp_protocol'];$data['update_time'] = date('Y-m-d H:i:s', time());if (empty($param['id'])){$data['status'] = 1;$data['create_time'] = date('Y-m-d H:i:s', time());}MailModel::redisSave($data, $param['id']);return succ('操作成功', []);}// 启禁用数据public function statusInfo(){$this->checkRoleMenu('ParamMailIndexSave');//验证权限$param = $this->request->param();if (!is_array($param['id']) || count($param['id']) === 0) return err('唯一编号必须是数组且至少需要一个');if (!in_array($param['status'],[0,1])) return err('状态必须选择一种');MailModel::mysqlSave(['status' =>$param['status']], [['id','in',$param['id']]]);return succ('操作成功', []);}// 删除数据public function deleteInfo(){$this->checkRoleMenu('ParamMailIndexDelete');//验证权限$id = $this->request->param('id',0);if (!is_array($id) || count($id) === 0) return err('请上传参数');MailModel::dataDetele($id);return succ('操作成功', []);}
}

四、邮箱配置数据管理

        在根目录下app文件夹下model文件夹中创建文件夹并命名为param,在param文件夹中创建邮箱配置数据文件并命名为Mail。具体代码如下:

<?php
/*** 邮箱配置数据管理* User: 龙哥·三年风水* Date: 2024/11/28* Time: 11:11*/
namespace app\model\param;
use app\model\Tools;
class Mail extends Tools
{protected static $name = 'param_mail';protected static $connection = 'mysql';protected $pk = 'id';protected static $unsetField = ['update_time','create_time'];//获取分页数据public static function getRedisList($where = [], $limit = []){return self::dataRedisLists(self::$name, $where, $limit, self::$connection);}//获取所有数据public static function getAll($where = [], $field = '*', $order = ''){return self::dataAlls(self::$name, $where, $field, $order, [], self::$connection);}//获取单条数据public static function dataFind($where = [], $field, $findType = true){return self::dataFinds(self::$name, $where, $field, $findType, self::$connection);}//保存数据-Redis版本public static function redisSave($data, $pk = ''){return self::dataRedisSaves(self::$name, $data, $pk, self::$connection);}//保存数据-MySQL版本public static function mysqlSave($data, $where = []){return self::dataSaves(self::$name, $data, $where, self::$connection);}//删除数据public static function dataDetele($pk = ''){self::dataRedisDeteles(self::$name, $pk, self::$connection); // TODO: Change the autogenerated stub}
}

五、邮箱配置验证管理

        在根目录下app文件夹下validate文件夹中创建文件夹并命名为param,在param文件夹中创建邮箱配置验证文件并命名为Mail。具体代码如下:

<?php
/*** 邮箱配置验证管理* User: 龙哥·三年风水* Date: 2024/11/28* Time: 11:39*/
namespace app\validate\param;
use app\validate\Tools;
use app\model\param\Mail as MailModel;
class Mail extends Tools
{protected $rule = ['id' => 'require|number','title' => 'require|length:2,20|unique:param_mail','username' => 'require|length:8,250|email','smtp_address' => 'require|length:10,250|checkSmtp','smtp_port' => 'require|number|checkSmtp','smtp_password' => 'require|length:10,50','smtp_lifespan' => 'require|number','smtp_protocol' => 'require|length:2,5'];protected $message = ['id.require' => '编号必须填写','id.number' => '编号必须是数字类型','title.require' => '标题必须填写','title.length' => '标题必须是2到20位','title.unique' => '标题必须唯一','username.require' => '发件人邮箱必须填写','username.length' => '发件人邮箱必须是8到250位','username.email' => '发件人邮箱必须是邮箱格式','smtp_address.require' => '地址必须填写','smtp_address.length' => '地址必须是2到250位','smtp_port.require' => '端口号必须填写','smtp_port.number' => '端口号必须是数字类型','smtp_password.require' => '授权码必须填写','smtp_password.length' => '授权码必须是10到50位','smtp_lifespan.require' => '有效期必须填写','smtp_lifespan.number' => '有效期必须是数字类型','smtp_protocol.require' => '协议必须填写','smtp_protocol.length' => '协议必须是2到5位'];protected function checkSmtp($value, $rule, $data, $field){$where[] = ['smtp_address','=',$data['smtp_address']];$where[] = ['smtp_port','=',$data['smtp_port']];if($data['id'] > 0)$where[] = ['id','<>',$data['id']];$id = MailModel::dataFind($where,'id',false);if(empty($id))return true;return "邮件服务已存在";}
}

相关文章:

群控系统服务端开发模式-应用开发-邮箱配置功能开发

邮箱配置主要是将管理员数据做归属。具体见下图&#xff1a; 一、创建表 1、语句 CREATE TABLE cluster_control.nc_param_mail (id int(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 编号,title varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT…...

【机器学习】——卷积与循环的交响曲:神经网络模型在现代科技中的协奏

&#x1f3bc;个人主页&#xff1a;【Y小夜】 &#x1f60e;作者简介&#xff1a;一位双非学校的大二学生&#xff0c;编程爱好者&#xff0c; 专注于基础和实战分享&#xff0c;欢迎私信咨询&#xff01; &#x1f386;入门专栏&#xff1a;&#x1f387;【MySQL&#xff0…...

android studio引用so库

在工程中编译好的so库文件将在原始编译工程对应目录下&#xff1a;build/intermediates/cxx/Debug/xxxxxx/obj/ 其目录结构如上所示&#xff0c;包含生成的四个版本&#xff0c;每个文件夹下均包含c/c源码编译成的Android版本的libnavi.so库和提供应用接口的libnavi-lib.so库。…...

2024年信号处理与神经网络应用(SPNNA 2024)

会议官网&#xff1a;www.spnna.org 会议时间&#xff1a;2024年12月13-15日 会议地点&#xff1a;中国武汉...

wxWidgets-ImageView

wxWidgets实现图片浏览、放大缩小、另存为新的图片格式等 #include "wx/wxprec.h"#ifndef WX_PRECOMP#include "wx/wx.h" #endif#include "wx/filename.h" #include "wx/zstream.h"#include "imageviewctrl.h"class MyFrame…...

第1章-JVM和Java体系架构

虚拟机 虚拟机概念 所谓虚拟机&#xff08;Virtual Machine&#xff09;&#xff0c;就是一台虚拟的计算机。它是一款软件&#xff0c;用来执行一系列虚拟计算机指令。大体上&#xff0c;虚拟机可以分为系统虚拟机和程序虚拟机。 大名鼎鼎的Virtual Box&#xff0c;VMware就属…...

windows 服务器角色

windows 服务器角色 Active Directory Rights Management Services Active Directory RightsManagement Services (AD RS)帮助保护信息&#xff0c;防止未授权使用。AD RMS 将建立用户标识&#xff0c;并为授权用户提供受保护信息的许可证。 ServicesActive Directory 联合身…...

[OpenHarmony5.0][Docker][环境]OpenHarmony5.0 Docker编译环境镜像下载以及使用方式

T. 已测试目录 主机类型主机版本Docker镜像版本结果WSL2Ubuntu22.04Ubuntu20.04PASSWSL2Ubuntu22.04Ubuntu18.04PASS R. 软硬件要求&#xff1a; 编译硬件需求&#xff1a;做多系统测试&#xff0c;磁盘500GB起步(固态)&#xff08;机械会卡死&#xff09;&#xff0c;内存3…...

C#中判断两个 List<T> 的内容是否相等

ET实现游戏中邮件系统逻辑思路&#xff08;服务端&#xff09;_游戏邮件系统设计-CSDN博客 场景&#xff1a;今天遇到一个BUG&#xff0c;在服务器重启的时候&#xff08;体验服&#xff09;&#xff0c;玩家之前接收的邮件又重新接收了一次&#xff0c;但是两封邮件的ID是不同…...

Linux环境下配置neo4j图数据库

1.下载安装包 openjdk-11.0.1_linux-x64_bin.tar.gz neo4j-community-4.2.19-unix.tar.gz 2.之前配置好的配置文件 neo4j.conf 3.安装 3.1-jdk11的安装&#xff08;jdk1.8不够用&#xff09; 解压缩 tar -zxvf openjdk-11.0.1_linux-x64_bin.tar.gz修改系统环境变量 打开pro…...

Windows 11 搭建 Docker 桌面版详细教程

在当今的软件开发与部署领域&#xff0c;Docker 已成为一项极为重要的容器化技术。它能够让开发者轻松地打包应用及其依赖项&#xff0c;实现跨环境的一致性运行&#xff0c;大大提高了开发效率与部署的便捷性。本教程将详细介绍在 Windows 11 操作系统上搭建 Docker 桌面版的具…...

Pytest-Bdd-Playwright 系列教程(13):钩子(hooks)

Pytest-Bdd-Playwright 系列教程&#xff08;13&#xff09;&#xff1a;钩子&#xff08;hooks&#xff09; 前言一、什么是钩子&#xff1f;二、Pytest-Bdd 提供的钩子一览三、钩子用法详解1. pytest_bdd_before_scenario2. pytest_bdd_after_scenario3. pytest_bdd_before_s…...

dns 服务器简单介绍

dns 服务器分类&#xff1a; 根域名服务器顶级域名服务器权威域名服务器本地域名服务器 dns 的查询过程 国内优秀公共域名 腾讯&#xff1a;DNSPod-免费智能DNS解析服务商-电信_网通_教育网,智能DNS-烟台帝思普网络科技有限公司 119.29.29.29 和 182.254.118.118 阿里&#xf…...

Neo4j图形数据库-Cypher中常用指令

一、创建与修改 1.1 create 创建图数据库中的节点、关系等元素&#xff1a; CREATE (:Person {name: "Alice", age: 30}) CREATE (p1:Person {name: "Bob"})-[r:KNOWS]->(p2:Person {name: "Charlie"})批量创建元素 CREATE (n1:Node),(n2…...

linux安全管理-防火墙配置

1. 开启系统防火墙 1、检查内容 检查操作系统是否开启防火墙&#xff1b; 2、配置要求 操作系统开启防火墙&#xff1b; 3、配置方法 systemctl status firewalld ##查看系统防火墙运行状态 systemctl start firewalld ##启动防火墙 systemctl restart firewalld ##重启防火墙…...

什么是BIOS

BIOS&#xff08;Basic Input/Output System&#xff0c;基本输入输出系统&#xff09;是计算机启动过程中的一个关键组件&#xff0c;主要负责硬件的初始化和系统的引导。以下是关于 BIOS 的一些详细信息&#xff1a; 1. 基本功能 硬件初始化&#xff1a;当计算机启动时&…...

c++视频图像处理

打开视频或摄像头 打开指定视频 /*VideoCapture(const String &filename, apiPreference);filename:读取的视频或者图像序列的名称apiPreference&#xff1a;读取数据时设置的属性*/ VideoCapture video; //定义一个空的视频对象 video.open("H:/BaiduNetdiskDownlo…...

音视频入门基础:MPEG2-TS专题(8)——TS Header中的适配域

注&#xff1a;本文有部分内容引用了维基百科&#xff1a;https://zh.wikipedia.org/wiki/MPEG2-TS 一、引言 当TS Header中的adaptation_field_control属性的值为10或11 时&#xff0c;TS Header包含adaptation field&#xff08;适配域&#xff09;&#xff1a; 根据《T-RE…...

基于stm32单片机的教室节能系统设计

功能描述 0. STM32F103C8T6单片机为控制核心 1. OLED液晶显示当前年 月 日 时 分 秒 星期 2. 按键可以设置定时时间 3. 按键可以设置用电开关的开启和关闭时间&#xff0c;实现设备的节能 4. 通过红外遥控可以打开关闭空调设备&#xff08;通过继电器开关闭合模拟&#x…...

mini主机通过内网穿透做成服务器

文章目录 简介1.ubuntu 的ssh server 安装2.ubuntu 的docker 安装3.ubuntu的curl的安装4.ubuntu的frp客户端安装5.ubuntu的docker compose安装6.声明 简介 主要目的 本地设备做成服务器&#xff0c;实现ssh远程登录以及内网穿透设备总成本1千多元&#xff08;其实部分设备可以…...

RestClient

什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端&#xff0c;它允许HTTP与Elasticsearch 集群通信&#xff0c;而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级&#xff…...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题&#xff1a; 下面创建一个简单的Flask RESTful API示例。首先&#xff0c;我们需要创建环境&#xff0c;安装必要的依赖&#xff0c;然后…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...