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

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

一、创建表

        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 "邮件服务已存在";}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/480578.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sd webui整合包怎么安装comfyui

环境: sd webui整合包 comfyui 问题描述: sd webui整合包怎么安装comfyui 扩展安装不成功 解决方案: 1.直接下载 ,解压到SD文件夹里(或者git拉一下) 2.ComfyUI模型共享:如果本机部署过Webui,那么ComfyUI可以与WebUI公用一套模型,防止复制大量模型浪费空间 将…

python基础(二)

函数 函数定义 函数是组织好的&#xff0c;可重复使用的&#xff0c;用来实现单一或相关联功能的代码段。 python函数定义规则&#xff1a; def my_max(a,b): #定义函数用def关键字开头&#xff0c;函数名-》my_max ()定义参数 if a>b: #函数体以&#xff1a…

【Springboot入门知识总结】

SpringBoot Web入门 一.Spring1.springBoot入门程序2.Spring官方脚手架连接不上的解决方案3.为什么一个main方法就将web应用 二. HTTP协议1.http协议的概念和特点2.Get请求和Post请求的区别3.http响应状态码分类4.获取http的参数 三.springBoot中的常用注解四.分层解耦五.总结 …

华为IPD流程学习之——深入解读123页华为IPD流程体系设计方法论PPT

该方案全面介绍了华为IPD流程体系设计方法论&#xff0c;包括流程体系建设的背景、理念、架构、核心特征、构建模型、与组织和战略的关系、运营机制、数字化转型以及流程管理组织等内容&#xff0c;旨在为企业提供一套系统的流程体系建设指导&#xff0c;以提升运营效率、质量和…

使用docker搭建hysteria2服务端

原链接&#xff1a;https://github.com/apernet/hysteria/discussions/1248 官网地址&#xff1a;https://v2.hysteria.network/zh/docs/getting-started/Installation/ 首选需要安装docker和docker compose 切换到合适的目录 cd /home创建文件夹 mkdir hysteria创建docke…

力扣hot100

文章目录 力扣hot100-哈希题目&#xff1a;两数之和方法1-暴力方法2-哈希 题目&#xff1a;字母异位词分组题解 题目&#xff1a;最长连续序列题解解释代码 力扣hot100-双指针题目&#xff1a;移动零题解 题目&#xff1a;盛最多水的容器题解 题目&#xff1a;三数之和题解 题目…

Scala身份证上的秘密以及Map的遍历

object test {def main(args: Array[String]): Unit {val id "42032220080903332x"//1.生日是&#xff1f;//字符串截取val birthday id.substring(10,14) //不包括终点下标println(birthday)val year id.substring(6,10) //println(year)//性别&#xff1a;倒数第…

设置ip和代理DNS的WindowsBat脚本怎么写?

今天分享一个我们在工作时&#xff0c;常见的在Windows中通过批处理脚本&#xff08;.bat 文件&#xff09;来设置IP地址、代理以及DNS 相关配置的示例&#xff0c;大家可以根据实际需求进行修改调整。 一、设置静态IP地址脚本示例 以下脚本用于设置本地连接&#xff08;你可…

【机器学习】—逻辑回归

逻辑回归实现详解 介绍 逻辑回归&#xff08;Logistic Regression&#xff09;是一种广泛应用于分类问题的统计模型&#xff0c;尤其适用于二分类问题。本文将通过一个简单的例子&#xff0c;使用Python和PyTorch库实现逻辑回归&#xff0c;并通过可视化展示模型的训练过程和…

华为仓颉编程环境搭建

1、仓颉介绍 摘自华为官方&#xff1a;仓颉编程语言作为一款面向全场景应用开发的现代编程语言&#xff0c;通过现代语言特性的集成、全方位的编译优化和运行时实现、以及开箱即用的 IDE 工具链支持&#xff0c;为开发者打造友好开发体验和卓越程序性能。 其具体特性表现为&am…

Vue.js当中v-if和v-show的区别

作者&#xff1a;CSDN-PleaSure乐事 欢迎大家阅读我的博客 希望大家喜欢 使用环境&#xff1a;WebStorm 目录 v-if和v-show举例 v-if 定义 特点 v-show 定义 特点 代码示例 v-if和v-show区别 原理 性能 适用性 v-if和v-show举例 首先我们还是简单回顾一下vue当中两…

【iOS】知乎日报总结

文章目录 前言首页网络请求轮播图上滑加载图片请求 文章详情页WKWebView的使用点赞、收藏持久化——FMDB的使用 其他问题沙盒问题单元格点击其他 总结 前言 在系统学习了OC语言和UI控件后&#xff0c;知乎日报是第一个比较大的项目&#xff0c;耗时一个多月时间&#xff0c;里面…

NLP信息抽取大总结:三大任务(带Prompt模板)

信息抽取大总结 1.NLP的信息抽取的本质&#xff1f;2.信息抽取三大任务&#xff1f;3.开放域VS限定域4.信息抽取三大范式&#xff1f;范式一&#xff1a;基于自定义规则抽取&#xff08;2018年前&#xff09;范式二&#xff1a;基于Bert下游任务建模抽取&#xff08;2018年后&a…

【Linux】网络连接模式,VM:桥接、NAT、仅主机如何选择?

1、网络类型 虚拟机建立时的常见网络类型有3种&#xff1a;桥接、NAT&#xff08;Network Address Translation&#xff0c;网络地址转换&#xff09;、仅主机&#xff08;Host Only&#xff09; 桥接&#xff1a;VM直接连接路由器&#xff0c;与物理机地位相同&#xff1b;N…

Spring Boot 3启动加载器详解(含源码解析)

一、引言 Spring Boot 3启动加载器是提升开发效率和应用程序启动速度的关键组件。本文将详细介绍Spring Boot 3的启动加载器&#xff0c;包括其实现方式、应用场景及工作原理等。 说明&#xff1a;本文分析使用的Spring Boot源码版本为3.3.5 二、启动加载器简介 启动加载器…

UDP客户端服务器通信

在这篇博客中&#xff0c;我们将探索 UDP&#xff08;用户数据报协议&#xff09; 通信&#xff0c;简要地说&#xff0c;UDP 是一种无连接、快速但不可靠的通信协议&#xff0c;适用于需要快速数据传输但对丢包容忍的场景&#xff0c;比如视频流和在线游戏。就像《我是如此相信…

手机实时提取SIM卡打电话的信令声音-智能拨号器的双SIM卡切换方案

手机实时提取SIM卡打电话的信令声音 --智能拨号器app的双SIM卡切换方案 一、前言 在蓝牙电话的方案中&#xff0c;由于采用市场上的存量手机来做为通讯呼叫的载体&#xff0c;而现在市面上大部分的手机都是“双卡双待单通”手机&#xff0c;简称双卡双待手机。即在手机开机后…

Spring Boot 同时接受文件和实体及 Postman 测试实战

Spring Boot 文件上传及 Postman 测试指南 在本文中&#xff0c;我们将介绍如何使用 Spring Boot 上传文件并通过 Postman 测试接口。我们会基于以下接口作为示例&#xff1a; Boolean importDevicePushConfig(RequestParam("file") MultipartFile file,DevicePush…

Paddle Inference部署推理(一)

一&#xff1a;Paddle Inference推理 简介 Paddle Inference 是飞桨的原生推理库&#xff0c;提供服务器端的高性能推理能力。由于 Paddle Inference 能力直接基于飞桨的训练算子&#xff0c;因此它支持飞桨训练出的所有模型的推理。 Paddle Inference 功能特性丰富&#xff…

搭建文件服务器并使用Qt实现文件上传和下载(带账号和密码)

文章目录 0 背景1 搭建文件服务器2 代码实现文件上传和下载2.1 在pro文件中添加网络支持2.2 创建网络管理类2.3 文件上传2.4 文件下载 3 扩展&#xff08;其他方法实现文件上传和下载&#xff09;3.1 python3.2 npm3.3 ftp服务器 4 完整的代码 0 背景 因为需要使程序具备在远程…