*/ class DnsHelper { use \ThurData\Servers\KerioEmail\Core\UI\Traits\WhmcsParams; public function KerioEmailCheckDNS() { unset($zoneID); unset($mxStatus); unset($dnsData); unset($vars); $params = $this->getWhmcsParamsByKeys(['domain', 'userid', 'serverhostname', 'domainid', 'serverid', 'pid']); $vars['maildomain'] = $params['domain']; $server = Server::select('id', 'nameserver1ip', 'nameserver2ip')->findOrFail($params['serverid']); $nameserver = array(trim($server->nameserver1ip), trim($server->nameserver2ip)); $clientDomains = localAPI('GetClientsDomains', array('clientid' => $params['userid'])); $productManager = new ProductManager(); $productManager->loadById($params['pid']); $spfConfig = $productManager->get('spf_string'); $dmarcConfig = $productManager->get('dmarc_string'); if($clientDomains['totalresults'] == 0){ $vars['selfdomain'] = FALSE; $vars['dmarcconfig'] = $dmarcConfig; $vars['spfconfig'] = $spfConfig; return $vars; } else { $vars['selfdomain'] = TRUE; } $resolver = new \Net_DNS2_Resolver(array('nameservers' => $nameserver)); try { $result = $resolver->query($params['domain'], 'MX'); } catch(\Net_DNS2_Exception $e) { echo "::query() failed: ", $e->getMessage(), "\n"; } $domainMX = $result->answer; try { $result = $resolver->query($params['domain'], 'TXT'); } catch(\Net_DNS2_Exception $e) { echo "::query() failed: ", $e->getMessage(), "\n"; } $domainTXT = $result->answer; $domainSPF = array(); $domainDKIM = array(); $domainDMARC = array(); foreach($domainTXT as $txtRecord) { foreach($txtRecord->text as $txtData) { if(strstr($txtData,'v=spf')) { array_push($domainSPF,$txtData); } if(strstr($txtData,'v=DKIM')) { array_push($domainDKIM,$txtData); } if(strstr($txtData,'v=DMARC')) { array_push($domainDMARC,$txtData); } } } # self hosted DNS $vars['selfDNS'] = FALSE; for($i=$clientDomains['startnumber'];$i<=$clientDomains['numreturned'];$i++) { if($params['domain'] == $clientDomains['domains']['domain'][$i]['domainname']) { $vars['selfDNS'] = TRUE; $vars['domainId'] = $clientDomains['domains']['domain'][$i]['id']; } } # SPF if (count($domainSPF) > 1) { $vars['multiSPF'] = TRUE; } else { $vars['multiSPF'] = FALSE; } $vars['spf'] = 'wrong'; if (empty($domainSPF)) { $vars['spf'] = 'unset'; } else { foreach($domainSPF as $spf) { if($spf === $spfConfig) { $vars['spf'] = 'set'; } } } $vars['domainSPF'] = $domainSPF; # DKIM if (count($domainDKIM) > 1) { $vars['multiDKIM'] = TRUE; } else { $vars['multiDKIM'] = FALSE; } if (empty($domainDKIM)) { $vars['dkim'] = 'unset'; } else { $vars['dkim'] = 'set'; } $vars['domainDKIM'] = $domainDKIM; # DMARC if (count($domainDMARC) > 1) { $vars['multiDMARC'] = TRUE; } else { $vars['multiDMARC'] = FALSE; } $vars['dmarc'] = 'wrong'; if (empty($domainDMARC)) { $vars['dmarc'] = 'unset'; } else { foreach($domainDMARC as $dmarc) { if($dmarc === $dmarcConfig) { $vars['dmarc'] = 'set'; } } } $vars['domainDMARC'] = $domainDMARC; # MX if(count($domainMX) > 1) { $vars['multiMX'] = TRUE; } else { $vars['multiMX'] = FALSE; } if(empty($domainMX)){ $vars['mx'] = 'unset'; $vars['mxtarget'] = $params['serverhostname']; } else { $vars['domainMX'] = $domainMX; $domainMXrecord = array_shift($domainMX); $vars['mxtarget'] = $domainMXrecord->exchange; if($domainMXrecord->exchange == $params['serverhostname']) { $vars['mx'] = 'set'; } else { $var['mx'] = 'wrong'; } } return $vars; } }