Download bt-source/panel/class/mailModel/fowardModel.py from SZFSPC/apple: direct link, hf CLI and curl.
- Browser
- Download file 8.91 kB
-
https://huggingface.co/spaces/SZFSPC/apple/resolve/main/bt-source/panel/class/mailModel/fowardModel.py
- Command line
-
hf download hf://spaces/SZFSPC/apple/bt-source/panel/class/mailModel/fowardModel.py
-
curl -L -o fowardModel.py https://huggingface.co/spaces/SZFSPC/apple/resolve/main/bt-source/panel/class/mailModel/fowardModel.py
8.91 kB
| 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 | |