pull/199/head
midoks 3 years ago
parent e21d17e342
commit 8f4dda2d65
  1. 18
      plugins/mail/index.html
  2. 6
      plugins/mail/index.py
  3. 139
      plugins/mail/js/mail.js
  4. 69
      plugins/mail/mail_init.py

@ -976,22 +976,6 @@ input[readonly] {
onclick="mail.open_editCode_view({service:'dovecot',title:'dovecot_配置文件'})">配置文件</a>
</td>
</tr>
<tr>
<td>Opendkim</td>
<td><span class="opendkim">获取中...</span></td>
<td style="text-align: right">
<a href="javascript:" class="btlink opendkim_start"
onclick="mail.service_admin('opendkim', 'start')">启动</a>
<a href="javascript:" class="btlink opendkim_stop"
onclick="mail.service_admin('opendkim', 'stop')">停止</a>&nbsp;|&nbsp;
<a href="javascript:" class="btlink"
onclick="mail.service_admin('opendkim', 'restart')">重启</a>&nbsp;|&nbsp;
<a href="javascript:" class="btlink"
onclick="mail.service_admin('opendkim', 'repair')">修复</a>&nbsp;|&nbsp;
<a href="javascript:;" class="btlink"
onclick="mail.open_editCode_view({service:'opendkim',title:'opendkim_配置文件'})">配置文件</a>
</td>
</tr>
<tr>
<td>Rspamd</td>
<td><span class="rspamd">获取中...</span></td>
@ -1036,7 +1020,7 @@ input[readonly] {
</div>
</div>
<script type="text/javascript">
resetPluginWinWidth(1080);
// resetPluginWinWidth(1080);
$.getScript( "/plugins/file?name=mail&f=js/mail.js", function(){
mail.init();
});

@ -24,6 +24,8 @@ app_debug = False
if mw.isAppleSystem():
app_debug = True
import mail_init as mi
class App:
__setupPath = '/www/server/mail'
@ -454,6 +456,10 @@ class App:
return mw.returnJson(True, '刷新成功!')
def check_mail_env(self):
data = mi.mail_init().check_env()
return mw.returnJson(True, 'ok', data)
if __name__ == "__main__":
func = sys.argv[1]

@ -1,5 +1,7 @@
var mail = {
plugin_name: 'mail',
post_env_list:['HostName','Postfix-Version','Postfix-install','Sqlite-support','Dovecot-install','Redis-install','Redis-Passwd','Rspamd-install','SElinux'],
post_env_text:['主机名','Postfix版本','Postfix安装','Sqlite支持','Dovecot安装','Redis安装','Redis密码','Rspamd','SElinux'],
init: function () {
var _this = this;
@ -35,7 +37,7 @@ var mail = {
layer.closeAll();
}
}, function (index) {
_this.check_post_env('setup_mail_sys')
_this.check_post_env('setup_mail_sys');
}, function () {
layer.closeAll();
});
@ -332,6 +334,17 @@ var mail = {
})
},
// 检查邮箱环境
check_mail_env:function(callback){
this.send({
tips: '正在检查邮局环境,请稍候...',
method: 'check_mail_env',
success: function (res) {
if (callback) callback(res);
}
})
},
//检查邮局环境
check_post_env:function (name) {
var _this = this;
@ -342,7 +355,21 @@ var mail = {
area: ['600px','575px'], //宽高
content:'\
<div class="pd20 mlr20 bt-mail-index" accept-charset="utf-8">\
<div id="checkPostEnv"></div>\
<div id="checkPostEnv">\
<div class="divtable" style="max-height:auto;">\
<table class="table table-hover">\
<thead style="position:relative;z-index:1;">\
<tr>\
<th><span>环境</span></th>\
<th><span>详情</span></th>\
<th><span>操作</span></th>\
</tr>\
</thead>\
<tbody>\
</tbody>\
</table>\
</div>\
</div>\
<ul class="help-info-text c7 mlr20">\
<li>如果邮局环境异常请先排除故障 请在所有异常修复完成后执行下一步操作</li>\
</ul>\
@ -353,7 +380,7 @@ var mail = {
<a class="layui-layer-btn1" data-index="1">取消</a>\
</div>',
success:function(index){
_this.create_post_env_table()
_this.create_post_env_table();
$('.bt-mail-btn').unbind().on('click','a',function(){
var _index = $(this).attr('data-index')
switch (_index){
@ -392,6 +419,110 @@ var mail = {
}
})
},
//创建邮局环境列表
create_post_env_table:function (callback){
var _this = this;
_this.check_mail_env(function(rdata){
var res = rdata.data;
$('#checkPostEnv tbody').empty();
$.each(_this.post_env_list,function(index,item){
var list = [];
var noOperList = ['Redis-install', 'Redis-Passwd', 'SElinux'];
$.each(_this.post_env_list, function (index, item) {
var data = res[item];
list.push({
env: item,
title: _this.post_env_text[index],
details: data.msg,
status: data.status
});
});
$('#checkPostEnv tbody').empty();
// bt_tools.table({
// el: '#checkPostEnv',
// autoHeight: true,
// data: list,
// default: 'No Data',
// column: [
// {
// fid: 'title',
// title: '环境',
// width: 140
// },
// {
// fid: 'details',
// title: '详情',
// type: 'text',
// width: 260,
// template: function (row) {
// var _html = '';
// var _cont = '';
// var _class = '';
// var msg = row.details;
// var status = row.status;
// var result = noOperList.includes(row.env);
// _class = status ? 'green' : 'set_mail_key red';
// if (msg && result) {
// _cont = status ? '就绪' : msg;
// } else {
// _cont = status ? '就绪' : (msg != '' ? msg : '异常');
// }
// _html = '<span class="size_ellipsis ' + _class + '" style="width: 240px;" title="' + _cont + '">' + _cont + '</span>';
// return _html;
// }
// },
// {
// title: '操作',
// type: 'group',
// group: [
// {
// title: '修复',
// template: function (row) {
// var _html = '<span>无操作</span>';
// var msg = row.details;
// var status = row.status;
// var result = noOperList.includes(row.env);
// if (!result && !!msg && !status) {
// _html = '修复';
// }
// return _html;
// },
// event: function (row, index, ev, key, that) {
// var flag = $(ev.currentTarget).hasClass('btlink');
// if (!flag) return;
// var key = row.env;
// if (key == 'HostName') {
// _this.repair_host_name();
// } else {
// layer.confirm('是否修复邮局环境?', {
// title: '修复邮局环境',
// btn: [lan.public.submit, lan.public.cancel],
// closeBtn: 2
// }, function () {
// _this.repair_mail_env(key);
// });
// }
// }
// }
// ]
// }
// ]
// });
// $('#checkPostEnv .divtable').removeClass('mtb10');
if(res[item].msg && ['Redis-install','Redis-Passwd','SElinux'].includes(item)){
$('#checkPostEnv tbody').append($('<tr><td>'+_this.post_env_text[index] +'</td><td title="'+res[item].msg.toString()+'" class="'+(res[item].status?'green':'set_mail_key red')+'">'+(res[item].status?"就绪":(res[item].msg.toString().length>30?res[item].msg.toString().substring(0,30)+'...':res[item].msg.toString()))+'</td><td>无操作</td></tr>'))
}else{
$('#checkPostEnv tbody').append($(`<tr><td>`+_this.post_env_text[index] +`</td><td title="`+res[item].msg+`" class="${(res[item].status?"green":"red")}">${(res[item].status?"就绪":(res[item].msg !=''?(res[item].msg.toString().length>30?res[item].msg.toString().substring(0,30)+'...':res[item].msg.toString()):"异常"))}</td><td>${(res[item].status?"无操作":"<a href='javascript:;' class='btlink set_mail_key' data-keys= "+ item+" >修复</a>")}</td></tr>`))
}
$('#checkPostEnv .divtable').removeClass('mtb10');
callback && callback();
})
})
},
str2Obj:function(str){
@ -431,7 +562,7 @@ var mail = {
}
var ret_data = $.parseJSON(res.data);
// console.log("send1:",ret_data);
console.log("send:",ret_data);
// if (!ret_data.status){
// layer.msg(ret_data.msg,{icon:2,time:2000});
// return;

@ -0,0 +1,69 @@
# coding:utf-8
import sys
import io
import os
import time
import re
sys.path.append(os.getcwd() + "/class/core")
import mw
app_debug = False
if mw.isAppleSystem():
app_debug = True
class mail_init:
def __init__(self):
self.logfile = '/tmp/mail_init.log'
def check_env(self):
data = {}
data['HostName'] = self.check_hostname()
data['Postfix-install'] = {"status": True, "msg": "Postfix已经安装"} if os.path.exists(
'/usr/sbin/postfix') else {"status": False, "msg": "Postfix未安装,请点击修复按钮"}
data['Dovecot-install'] = {"status": True, "msg": "Deovecot已经安装"} if os.path.exists(
'/usr/sbin/dovecot') else {"status": False, "msg": "Dovecot未安装,请点击修复按钮"}
data['Postfix-Version'] = self.check_postfix_ver()
data['Redis-install'] = {"status": True, "msg": "Redis已经安装"} if os.path.exists(
'/www/server/redis/src/redis-server') else {"status": False, "msg": "请到软件商店内安装Redis"}
data['Redis-Passwd'] = self.check_redis_passwd(data['Redis-install'])
data['Rspamd-install'] = {"status": True, "msg": "Rspamd已经安装"} if os.path.exists(
'/usr/bin/rspamd') else {"status": False, "msg": "Rspamd未安装,请点击修复按钮"}
data['Sqlite-support'] = self.check_sqlite()
data['SElinux'] = {"status": True, "msg": "SElinux已经禁用"} if not 'enforcing' in mw.execShell(
'getenforce')[0].lower() else {"status": False, "msg": "请先禁用SElinux"}
return data
def check_hostname(self):
import socket
rep = '^(?!:\/\/)(?=.{1,255}$)((.{1,63}\.){1,127}(?![0-9]*$)[a-z0-9-]+\.?)$'
hostname = socket.gethostname()
if re.search(rep, hostname):
return mw.returnData(True, 'success')
return mw.returnData(False, '你的主机名 ({}) 不合规定, 需要是完整域名'
'你可以通过以下命令修复你的主机名 '
'在ssh终端执行 \'hostnamectl set-hostname --static mail.example.com\''.format(hostname))
def check_postfix_ver(self):
postfix_version = mw.execShell(
r"postconf mail_version|sed -r 's/.* ([0-9\.]+)$/\1/'")[0].strip()
if postfix_version.startswith('3'):
return mw.returnData(True, postfix_version)
else:
return mw.returnData(False, "当前版本不支持或Postfix没有安装成功:{}".format(postfix_version))
def check_redis_passwd(self, redis_install):
redis_conf = mw.readFile('/www/server/redis/redis.conf')
if redis_install['status']:
if re.search('\n\s*requirepass', redis_conf):
return mw.returnData(True, "Redis已经设置密码")
return mw.returnData(False, "请到Redis管理器设置密码!")
def check_sqlite(self):
if not mw.execShell('postconf -m | grep sqlite')[0].strip():
return mw.returnData(False, "Postfix不支持Sqlite")
return mw.returnData(True, "Postfix已支持Sqlite")
Loading…
Cancel
Save