andre 5 месяцев назад
Родитель
Сommit
168e1c4baf
2 измененных файлов с 45 добавлено и 30 удалено
  1. 15 11
      app/UI/Client/Setting/Pages/Settings.php
  2. 30 19
      core/Helper/DnsHelper.php

+ 15 - 11
app/UI/Client/Setting/Pages/Settings.php

@@ -12,6 +12,7 @@ use ThurData\Servers\KerioEmail\Core\UI\Widget\DataTable\DataProviders\Providers
 use ThurData\Servers\KerioEmail\Core\UI\Widget\DataTable\DataTable;
 use ThurData\Servers\KerioEmail\Api\KerioWhmcs;
 use ThurData\Servers\KerioEmail\App\Libs\Product\ProductManager;
+use ThurData\Servers\KerioEmail\Core\Helper\DnsHelper;
 
 /**
  *
@@ -115,6 +116,7 @@ class Settings extends DataTable implements ClientArea
         try {
             $api->login($this->getWhmcsParamByKey('serverhostname'), $this->getWhmcsParamByKey('serverusername'), $this->getWhmcsParamByKey('serverpassword'));
             $domains = $api->getDomains(['id','name','aliasList']);
+            $dkimSet = $api->getDkimDnsRecord($maildomain);
         } catch (KerioApiException $error) {
             logModuleCall(
                 'kerioEmail',
@@ -132,30 +134,32 @@ class Settings extends DataTable implements ClientArea
             }
         }
 
-        $dkimSet = $api->getDkimDnsRecord($maildomain);
-
-        logModuleCall(
-            'kerioEmail',
-            __FUNCTION__,
-            $dkimSet,
-            'Debug Settings',
-            $maildomain
-        );
+        $api->logout();
 
+        // format dkim response
         $dkimArray = explode(PHP_EOL,$dkimSet['detail']);
         $dkimValue = explode(":",$dkimArray[1]);
         $this->domainKey = ltrim($dkimValue[1]);
         $dkimName = explode(":",$dkimArray[0]);
         $this->dkimName = ltrim($dkimName[1]);
 
-        $api->logout();
-
         // get settings from product configuration
         $productManager = new ProductManager();
         $productManager->loadById($this->getWhmcsParamByKey('pid'));
         $this->spfConfig = $productManager->get('spf_string');
         $this->dmarcConfig = $productManager->get('dmarc_string');
 
+        $dns = new DnsHelper();
+        $mx = $dns->getMX($maildomain);
+
+        logModuleCall(
+            'kerioEmail',
+            __FUNCTION__,
+            $mx,
+            'Debug Settings',
+            $maildomain
+        );
+
         /**
          * format model to array
          */

+ 30 - 19
core/Helper/DnsHelper.php

@@ -23,27 +23,38 @@ class DnsHelper
         $this->server = Server::select('id', 'nameserver1ip', 'nameserver2ip')->findOrFail($this->params['serverid']);
 //        $this->nameserver = array(trim($this->server->nameserver1ip), trim($this->server->nameserver2ip));
         $this->nameserver = array('127.0.0.1', '127.0.0.2'); //test
-        $this->clientDomains = localAPI('GetClientsDomains', array('clientid' => $this->params['userid']));
-        $api = new KerioWhmcs('whmcsKerioEmail', 'Thurdata', '1.0');
+        $this->resolver = new \Net_DNS2_Resolver(array('nameservers' => $this->nameserver));
+    }    
+
+    public function getMX($domain){
         try {
-        	$api->login($this->params['serverhostname'], $this->params['serverusername'], $this->params['serverpassword']);
-        } catch (KerioApiException $error) {
-            logModuleCall(
-                'kerioEmail',
-                __FUNCTION__,
-                $this->params,
-                'Error: cannot login to ' . $this->params['kerioServer'],
-        		$error->getMessage()
-            );
+                $result = $resolver->query($domain, 'MX');
+                
+        } catch(\Net_DNS2_Exception $e) {
+                
+                echo "::query() failed: ", $e->getMessage(), "\n";
         }
-        $dkimSet = $api->getDkimDnsRecord($this->params['domain']);
-        $dkimArray = explode(PHP_EOL,$dkimSet['detail']);
-        $dkimValue = explode(":",$dkimArray[1]);
-        $this->domainKey = ltrim($dkimValue[1]);
-        $dkimName = explode(":",$dkimArray[0]);
-        $this->dkimName = ltrim($dkimName[1]);
-    }    
-    
+        $domainMX = $result->answer;
+        if(count($domainMX) > 1) {
+            $vars['multiMX'] = TRUE;
+        } else {
+            $vars['multiMX'] = FALSE;
+        }
+        if(empty($domainMX)){
+            $vars['mx'] = 'unset';
+            $vars['mxtarget'] = $this->params['serverhostname'];
+        } else {
+            $vars['domainMX'] = $domainMX;
+            $domainMXrecord = array_shift($domainMX);
+            $vars['mxtarget'] = $domainMXrecord->exchange;
+            if($domainMXrecord->exchange == $this->params['serverhostname']) {
+                $vars['mx'] = 'set';
+            } else {
+                $var['mx'] = 'wrong';
+            }
+        }
+        return $vars;
+    }
     public function KerioEmailCheckDNS()
     {
         $vars['maildomain'] = $this->params['domain'];