diff --git a/plugins/mail/index.py b/plugins/mail/index.py
index b6ff50b03..d7f8470ba 100755
--- a/plugins/mail/index.py
+++ b/plugins/mail/index.py
@@ -5,7 +5,20 @@ import io
import os
import time
+from datetime import datetime
+
+try:
+ import dns.resolver
+except:
+ if os.path.exists(os.getcwd() + '/bin'):
+ mw.mw(os.getcwd() + '/bin/pip install dnspython')
+ else:
+ mw.execShell('pip install dnspython')
+ import dns.resolver
+
+
sys.path.append(os.getcwd() + "/class/core")
+
import mw
app_debug = False
@@ -52,7 +65,7 @@ def status():
return 'start'
-def pSqliteDb(dbname='domain'):
+def M(dbname='domain'):
file = getServerDir() + '/postfixadmin.db'
name = 'mail'
if not os.path.exists(file):
@@ -72,9 +85,74 @@ def pSqliteDb(dbname='domain'):
return conn
+def __check_a(hostname):
+ key = '{0}:{1}'.format(hostname, 'A')
+ now = int(time.time())
+
+ value = ""
+ error_ip = ""
+
+ ipaddress = mw.getLocalIp()
+ if not ipaddress:
+ return False, {"status": 0, "v_time": now, "value": error_ip}
+
+ try:
+ resolver = dns.resolver.Resolver()
+ resolver.timeout = 1
+ try:
+ result = resolver.resolve(hostname, 'A')
+ except:
+ result = resolver.query(hostname, 'A')
+
+ for i in result.response.answer:
+ for j in i.items:
+ error_ip = j
+ if str(j).strip() in ipaddress:
+ value = str(j).strip()
+
+ if value:
+ return True, {"status": 1, "v_time": now, "value": value}
+ return False, {"status": 0, "v_time": now, "value": error_ip}
+ except Exception as e:
+ raise e
+ return False, {"status": 0, "v_time": now, "value": error_ip}
+
+
def addDomain():
args = getArgs()
+ if 'domain' not in args:
+ return mw.returnJson(False, '请传入域名')
+
+ domain = args['domain']
+ a_record = args['a_record']
+
+ if not a_record.endswith(domain):
+ return mw.returnJson(False, 'A记录 [{}] 不属于该域名'.format(a_record))
+
+ if not mw.isDebugMode():
+ check = __check_a(a_record)
+ if not check[0]:
+ return mw.returnJson(False, 'A记录解析失败
域名:{}
IP:{}'.format(a_record, check[1]['value']))
+
+ if M('domain').where("domain=?", (domain,)).count() > 0:
+ return mw.returnJson(False, '该域名已存在')
+
+ cur_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
+ try:
+ M('domain').add('domain,a_record,created',
+ (domain, a_record, cur_time))
+ except:
+ return mw.returnJson(False, '邮局没有初始化成功!
'
+ '请尝试重新初始化,
'
+ '如果以下端口没访问将无法初始化
port 25 [outbound direction]
'
+ '你可以尝试执行以下命令测试端口是否开启:
[ telnet gmail-smtp-in.l.google.com 25 ]
')
+
+ # 在虚拟用户家目录创建对应域名的目录
+ if os.path.exists('/www/vmail'):
+ if not os.path.exists('/www/vmail/{0}'.format(domain)):
+ os.makedirs('/www/vmail/{0}'.format(domain))
+ mw.execShell('chown -R vmail:mail /www/vmail/{0}'.format(domain))
return mw.returnJson(False, 'OK')