当前位置: 首页 > 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;其实部分设备可以…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

ES6从入门到精通:前言

ES6简介 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript语言的重大更新&#xff0c;引入了许多新特性&#xff0c;包括语法糖、新数据类型、模块化支持等&#xff0c;显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

Unity3D中Gfx.WaitForPresent优化方案

前言 在Unity中&#xff0c;Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染&#xff08;即CPU被阻塞&#xff09;&#xff0c;这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案&#xff1a; 对惹&#xff0c;这里有一个游戏开发交流小组&…...

day52 ResNet18 CBAM

在深度学习的旅程中&#xff0c;我们不断探索如何提升模型的性能。今天&#xff0c;我将分享我在 ResNet18 模型中插入 CBAM&#xff08;Convolutional Block Attention Module&#xff09;模块&#xff0c;并采用分阶段微调策略的实践过程。通过这个过程&#xff0c;我不仅提升…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

1.3 VSCode安装与环境配置

进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件&#xff0c;然后打开终端&#xff0c;进入下载文件夹&#xff0c;键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件&#xff0c;所以得把软件用docker打包起来&#xff0c;大部分功能都没问题&#xff0c;出了一个奇怪的事情。同样的代码&#xff0c;在本机上用vscode可以运行起来&#xff0c;但是打包之后在docker里出现了问题。使用的是dialog组件&#xff0c;…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子&#xff1a; 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)

题目 做法 启动靶机&#xff0c;点进去 点进去 查看URL&#xff0c;有 ?fileflag.php说明存在文件包含&#xff0c;原理是php://filter 协议 当它与包含函数结合时&#xff0c;php://filter流会被当作php文件执行。 用php://filter加编码&#xff0c;能让PHP把文件内容…...