增加邮箱配置

This commit is contained in:
李志强 2025-05-26 17:34:38 +08:00
parent 92a08c5e6d
commit 68ab7e257b
4 changed files with 332 additions and 130 deletions

View File

@ -13,10 +13,14 @@ use app\admin\model\AdminSysMenu;
use app\admin\model\AdminUserGroup;
use app\admin\model\AdminConfig;
use app\admin\model\ZIconfont;
use app\admin\model\MailConfig;
use \PHPMailer\PHPMailer\PHPMailer;
class YunzerController extends Base{
class YunzerController extends Base
{
# 菜单列表
public function menuinfo(){
public function menuinfo()
{
$lists = AdminSysMenu::where('parent_id', 0)->order('sort DESC,smid DESC')->select();
View::assign([
'lists' => $lists
@ -92,7 +96,8 @@ class YunzerController extends Base{
}
}
# 菜单修改
public function menuedit(){
public function menuedit()
{
$req = request();
if ($req->isPost()) {
$smid = (int) input('post.smid');
@ -140,7 +145,8 @@ class YunzerController extends Base{
}
}
# 菜单删除
public function menudel(){
public function menudel()
{
$smid = (int) input('post.smid');
$count = AdminSysMenu::where('parent_id', $smid)->count();
if ($count > 0) {
@ -156,7 +162,8 @@ class YunzerController extends Base{
$this->returnCode(0);
}
# 按钮管理
public function buttoninfo(){
public function buttoninfo()
{
$smid = (int) input('get.smid');
$lists = AdminSysMenu::where('parent_id', $smid)->order('sort DESC')->select()->toArray();
if (!empty($lists)) {
@ -184,7 +191,8 @@ class YunzerController extends Base{
return View::fetch();
}
# 按钮添加
public function buttonadd(){
public function buttonadd()
{
$req = request();
if ($req->isPost()) {
$smid = (int) input('post.smid');
@ -233,7 +241,8 @@ class YunzerController extends Base{
}
}
# 按钮修改
public function buttonedit(){
public function buttonedit()
{
$req = request();
if ($req->isPost()) {
$smid = (int) input('post.smid');
@ -282,7 +291,8 @@ class YunzerController extends Base{
}
}
# 按钮删除
public function buttondel(){
public function buttondel()
{
$smid = (int) input('post.smid');
$res = AdminSysMenu::where('smid', $smid)->delete();
if (empty($res)) {
@ -293,7 +303,8 @@ class YunzerController extends Base{
$this->returnCode(0);
}
# 配置列表
public function configlist(){
public function configlist()
{
$req = request();
if ($req->isPost()) {
$page = (int) input('post.page', 1);
@ -306,7 +317,8 @@ class YunzerController extends Base{
}
}
# 配置添加
public function configadd(){
public function configadd()
{
$req = request();
if ($req->isPost()) {
$data['config_name'] = trim(input('post.config_name'));
@ -335,7 +347,8 @@ class YunzerController extends Base{
}
}
# 配置修改
public function configedit(){
public function configedit()
{
$req = request();
if ($req->isPost()) {
$config_id = (int) input('post.config_id');
@ -374,7 +387,8 @@ class YunzerController extends Base{
}
}
# 配置删除
public function configdel(){
public function configdel()
{
$config_id = (int) input('post.config_id');
if (empty($config_id)) {
Log::record('删除配置', 0, '请选择一条数据', '系统配置');
@ -389,7 +403,8 @@ class YunzerController extends Base{
$this->returnCode(0);
}
# 配置值
public function configvalue(){
public function configvalue()
{
$req = request();
if ($req->isPost()) {
$post = input('post.');
@ -413,4 +428,92 @@ class YunzerController extends Base{
return View::fetch();
}
}
// 邮件配置
public function mailconfig()
{
if (Request::isPost()) {
$data = [
'smtp_host' => input('post.smtp_host'),
'smtp_port' => input('post.smtp_port'),
'smtp_email' => input('post.smtp_email'),
'smtp_password' => input('post.smtp_password'),
'smtp_name' => input('post.smtp_name')
];
// 验证必填字段
if (empty($data['smtp_host']) || empty($data['smtp_port']) || empty($data['smtp_email']) || empty($data['smtp_password'])) {
// Log::record('修改邮件配置', 0, '必填字段不能为空', '邮件配置');
return json(['code' => 1, 'msg' => '必填字段不能为空']);
}
$res = MailConfig::where('id', 1)->update($data);
if ($res === false) {
// Log::record('修改邮件配置', 0, '更新邮件配置失败', '邮件配置');
return json(['code' => 1, 'msg' => '更新邮件配置失败']);
}
// Log::record('修改邮件配置', 1, '', '邮件配置');
return json(['code' => 0, 'msg' => '更新成功']);
}
$config = MailConfig::where('id', 1)->find();
View::assign([
'config' => $config
]);
return View::fetch();
}
// 获取邮件配置
public function getMailConfig()
{
$config = MailConfig::where('id', 1)->find();
if ($config) {
return json(['code' => 0, 'msg' => '获取成功', 'data' => $config]);
}
return json(['code' => 1, 'msg' => '获取配置失败']);
}
// 测试邮件配置
public function testMailConfig()
{
if (!Request::isPost()) {
return json(['code' => 1, 'msg' => '请求方法无效']);
}
$email = input('post.email');
$config = input('post.config');
if (empty($email) || empty($config)) {
return json(['code' => 1, 'msg' => '参数错误']);
}
try {
// 配置邮件服务器
$mail = new PHPMailer(true);
$mail->isSMTP();
$mail->Host = $config['smtp_host'];
$mail->Port = $config['smtp_port'];
$mail->SMTPAuth = true;
$mail->Username = $config['smtp_email'];
$mail->Password = $config['smtp_password'];
$mail->SMTPSecure = 'ssl';
$mail->CharSet = 'UTF-8';
// 设置发件人
$mail->setFrom($config['smtp_email'], $config['smtp_name']);
$mail->addAddress($email);
// 设置邮件内容
$mail->isHTML(true);
$mail->Subject = '邮件配置测试';
$mail->Body = '这是一封测试邮件,如果您收到这封邮件,说明邮件配置正确。';
$mail->send();
return json(['code' => 0, 'msg' => '发送成功']);
} catch (\Exception $e) {
//Log::record('测试邮件配置', 0, $e->getMessage(), '邮件配置');
return json(['code' => 1, 'msg' => '发送失败:' . $e->getMessage()]);
}
}
}

View File

@ -4,7 +4,7 @@ use app\admin\controller\Base;
use think\facade\Db;
use think\facade\View;
use think\facade\Request;
use app\admin\controller\Log;
use app\admin\controller\LogController as Log;
use app\admin\model\AdminSysMenu;
use app\admin\model\AdminUserGroup;
use app\admin\model\AdminUser;
@ -102,23 +102,8 @@ class YunzeradminController extends Base
$group['rights'] = json_decode($group['rights']);
}
$menus = AdminSysMenu::order('type,sort desc')->where('status', '=', 1)->select();
$menu = [];
// 先处理所有父菜单
foreach ($menus as $menus_v) {
if ($menus_v['parent_id'] == 0) {
$menu[$menus_v['smid']] = $menus_v;
$menu[$menus_v['smid']]['children'] = []; // 初始化 children 数组
}
}
// 再处理子菜单
foreach ($menus as $menus_v) {
if ($menus_v['parent_id'] != 0 && isset($menu[$menus_v['parent_id']])) {
$menu[$menus_v['parent_id']]['children'][] = $menus_v;
}
}
// 使用模型中的 getMenuTree 方法获取菜单树
$menu = AdminSysMenu::getMenuTree();
View::assign([
'group' => $group,
@ -467,4 +452,5 @@ class YunzeradminController extends Base
return json(['code' => 1, 'msg' => '请求方法无效']);
}
}

View File

@ -0,0 +1,8 @@
<?php
namespace app\admin\model;
use think\Model;
class MailConfig extends Model
{
}

View File

@ -0,0 +1,105 @@
{include file="public/header" /}
<div class="layui-form" lay-filter="mailConfigForm" style="padding: 30px;">
<div class="layui-form-item">
<label class="layui-form-label">SMTP服务器</label>
<div class="layui-input-block">
<input type="text" name="smtp_host" value="smtp.qq.com" placeholder="请输入SMTP服务器地址" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">SMTP端口</label>
<div class="layui-input-block">
<input type="text" name="smtp_port" value="465" placeholder="请输入SMTP端口" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">发件人邮箱</label>
<div class="layui-input-block">
<input type="text" name="smtp_email" placeholder="请输入发件人邮箱" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">邮箱密码</label>
<div class="layui-input-block">
<input type="password" name="smtp_password" placeholder="请输入邮箱密码或授权码" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">发件人名称</label>
<div class="layui-input-block">
<input type="text" name="smtp_name" value="学创网络" placeholder="请输入发件人名称" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<div class="layui-input-block">
<button class="layui-btn" lay-submit lay-filter="saveMailConfig">保存配置</button>
<button class="layui-btn layui-btn-primary" lay-filter="testMailConfig">测试发送</button>
</div>
</div>
</div>
<script>
layui.use(['form', 'layer'], function(){
var form = layui.form;
var layer = layui.layer;
// 加载配置
$.get('/admin/yunzer/getMailConfig', function(res){
if(res.code === 1){
form.val('mailConfigForm', res.data);
}
});
// 保存配置
form.on('submit(saveMailConfig)', function(data){
$.post('/admin/yunzer/saveMailConfig', data.field, function(res){
if(res.code === 1){
layer.msg('保存成功');
}else{
layer.msg(res.msg);
}
});
return false;
});
// 测试发送
form.on('submit(testMailConfig)', function(data){
layer.prompt({
formType: 0,
title: '请输入测试邮箱地址',
area: ['300px', '150px']
}, function(value, index){
$.post('/admin/yunzer/testMailConfig', {
email: value,
config: data.field
}, function(res){
if(res.code === 1){
layer.msg('发送成功');
}else{
layer.msg(res.msg);
}
});
layer.close(index);
});
return false;
});
});
</script>
<style>
.layui-form-item{
display: flex;
}
.layui-form-label{
width: 90px !important;
}
.layui-input-block{
width: 100% !important;
margin-left: 0 !important;
}
</style>
{include file="public/tail" /}