test / bt-source /panel /class /mailModel /fowardModel.py
GGSheng's picture
feat: deploy Gemma 4 to hf space
08c964e verified
import json
import re
import sys
import time
from mailModel.base import Base
sys.path.append("class/")
import public
class main(Base):
def __init__(self):
pass
def check_main_conf(self, get=None):
"""
检查主配置文件
@return:
"""
main_conf = public.readFile("/etc/postfix/main.cf")
if not main_conf:
return {"status": False, "msg": "主配置文件不存在"}
conf = "virtual_alias_maps = sqlite:/etc/postfix/sqlite_virtual_alias_new_maps.cf, sqlite:/etc/postfix/sqlite_virtual_alias_domain_new_maps.cf, sqlite:/etc/postfix/sqlite_virtual_alias_domain_catchall_new_maps.cf, sqlite:/etc/postfix/bt_catchnone_maps.cf"
if conf not in main_conf:
public.print_log("主配置文件检查不通过,开始修改")
main_conf = re.sub(r'virtual_alias_maps\s*=.*', conf, main_conf)
public.writeFile("/etc/postfix/main.cf", main_conf)
return {"status": True, "msg": "主配置文件检查完成"}
def check_maps_conf(self, get=None):
"""
检查maps配置文件
@return:
"""
if public.FileMd5("/etc/postfix/sqlite_virtual_alias_new_maps.cf") != "11ea7f20ced0b1b5cfff7aa8bb818600":
public.print_log("开始下载maps配置文件")
public.ExecShell(
'wget -O /etc/postfix/sqlite_virtual_alias_new_maps.cf {}/mail_sys/postfix/sqlite_virtual_alias_new_maps.cf -T 10'.format(
public.get_url()))
if public.FileMd5("/etc/postfix/sqlite_virtual_alias_domain_new_maps.cf") != "523b9217adfb715b1e0badd874e30904":
public.print_log("开始下载maps配置文件")
public.ExecShell(
'wget -O /etc/postfix/sqlite_virtual_alias_domain_new_maps.cf {}/mail_sys/postfix/sqlite_virtual_alias_domain_new_maps.cf -T 10'.format(
public.get_url()))
if public.FileMd5("/etc/postfix/sqlite_virtual_alias_domain_catchall_new_maps.cf") != "a6c4368fef0b6c27be690f354e970344":
public.print_log("开始下载maps配置文件")
public.ExecShell(
'wget -O /etc/postfix/sqlite_virtual_alias_domain_catchall_new_maps.cf {}/mail_sys/postfix/sqlite_virtual_alias_domain_catchall_new_maps.cf -T 10'.format(
public.get_url()))
if public.FileMd5("/etc/postfix/bt_catchnone_maps.cf") != "d41d9d8159ada493f1278ab737e1c47c":
public.print_log("开始下载maps配置文件")
public.ExecShell(
'wget -O /etc/postfix/bt_catchnone_maps.cf {}/mail_sys/postfix/bt_catchnone_maps.cf -T 10'.format(
public.get_url()))
return {"status": True, "msg": "maps配置文件检查完成"}
def get_mail_forward(self, get):
"""
获取邮件转发
@param get:
@return:
"""
dtype = "0"
if "dtype" in get:
dtype = get.dtype
if dtype == "1":
data = self.M("alias_domain").field('alias_domain as address,alias_domain as domain,alias_domain as forwarder,target_domain as goto,created,modified,active').order('created desc').select()
else:
data = self.M("alias").order('created desc').select()
for i in data:
user = i["address"].split("@")[0]
if not user:
i["rule"] = "none"
i["rule_str"] = ""
i["forwarder"] = "[不存在的邮箱]"
else:
if user == "%":
i["rule"] = "all"
i["rule_str"] = ""
i["forwarder"] = "[全部邮箱]"
elif user[0] == "%" and user[-1] == "%":
i["rule"] = "contain"
i["rule_str"] = user[1:-1]
i["forwarder"] = "包含[{}]的邮箱".format(user[1:-1])
elif user[0] == "%":
i["rule"] = "suffix"
i["rule_str"] = user[1:]
i["forwarder"] = "以[{}]结尾的邮箱".format(user[1:])
elif user[-1] == "%":
i["rule"] = "prefix"
i["rule_str"] = user[:-1]
i["forwarder"] = "以[{}]开头的邮箱".format(user[:-1])
else:
i["rule"] = ""
i["rule_str"] = ""
i["forwarder"] = i["address"]
i["goto"] = i["goto"].replace(",", "\n")
return {"status": True, "msg": "", "data": data}
def add_forward(self, get):
"""
添加邮件转发
@param get:
@return:
"""
modified_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
if get.forward_type == "1":
if self.M("alias_domain").where("alias_domain=?", (get.domain,)).count() > 0:
return {"status": False, "msg": "域名【{}】转发规则已存在".format(get.domain)}
self.M("alias_domain").add("alias_domain,target_domain,created,modified,active",
(get.domain, get.receiver, modified_time, modified_time, int(get.status)))
else:
if "rule"not in get or not get.rule:
if not get.rule_str:
return {"status": False, "msg": "被转发邮箱不能为空", "bind_success": []}
address = get.rule_str
elif get.rule in ("all","none") :
if get.rule == "all":
address = "%@"+get.domain
if self.M("alias").where("address=?", ("@"+get.domain,)).count() > 0:
return {"status": False, "msg": "同一域名,捕获全部邮箱转发和捕获不存在的邮箱转发不能同时存在"}
else:
address = "@"+get.domain
if self.M("alias").where("address=?", ("%@"+get.domain,)).count() > 0:
return {"status": False, "msg": "同一域名,捕获全部邮箱转发和捕获不存在的邮箱转发不能同时存在"}
elif get.rule in ("contain","suffix","prefix"):
if len(get.rule_str) > 10:
return {"status": False, "msg": "规则内容长度不能大于10", "bind_success": []}
if not re.match(r"^[a-zA-Z0-9_]+$", get.rule_str):
return {"status": False, "msg": "规则内容只能包含字母、数字和下划线", "bind_success": []}
if get.rule == "contain":
address = "%"+get.rule_str+"%@"+get.domain
elif get.rule == "suffix":
address = "%"+get.rule_str+"@"+get.domain
else:
address = get.rule_str+"%@"+get.domain
else:
return {"status": False, "msg": "规则错误"}
if self.M("alias").where("address=?", (address,)).count() > 0:
return {"status": False, "msg": "此规则已存在,请勿重复添加"}
receiver = get.receiver.strip().replace("\n", ",")
self.M("alias").add("address,goto,domain,created,modified,active",
(address, receiver, get.domain, modified_time, modified_time, int(get.status)))
return {"status": True, "msg": "添加成功"}
def edit_forward(self, get):
"""
编辑邮件转发
@param get:
@return:
"""
modified_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
if get.forward_type == "1":
self.M("alias_domain").where("alias_domain=?", (get.address,)).update(
{"target_domain": get.receiver, "modified": modified_time, "active": int(get.status)})
else:
receiver = get.receiver.strip().replace("\n", ",")
self.M("alias").where("address=?", (get.address,)).update(
{"goto": receiver, "modified": modified_time, "active": int(get.status)})
return {"status": True, "msg": "修改成功"}
def del_forward(self, get):
"""
删除邮件转发
@param get:
@return:
"""
address = get.address.split(",")
if get.forward_type == "1":
self.M("alias_domain").where("alias_domain in ('{}')".format("','".join(address)), ()).delete()
else:
self.M("alias").where("address in ('{}')".format("','".join(address)), ()).delete()
return {"status": True, "msg": "删除成功"}
def _conf():
try:
main().check_main_conf()
main().check_maps_conf()
public.ExecShell("postfix reload")
except:
public.print_log(public.get_error_info())
_conf()
del _conf