Server IP : 104.21.14.103 / Your IP : 3.144.254.245 Web Server : LiteSpeed System : Linux business53.web-hosting.com 4.18.0-553.lve.el8.x86_64 #1 SMP Mon May 27 15:27:34 UTC 2024 x86_64 User : giankuin ( 1871) PHP Version : 7.4.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /proc/self/root/home/giankuin/thietke365.net/wp-content/plugins/mailpoet/lib/Util/ |
Upload File : |
<?php declare(strict_types = 1); namespace MailPoet\Util; if (!defined('ABSPATH')) exit; class DmarcPolicyChecker { const POLICY_NONE = 'none'; const POLICY_REJECT = 'reject'; const POLICY_QUARANTINE = 'quarantine'; /** * Lookup the Domain DMARC Policy * returns reject or quarantine or none */ public function getDomainDmarcPolicy(string $domain): string { if (!$domain) { throw new \InvalidArgumentException('Domain is Required'); } $dnsLookup = dns_get_record("_dmarc.$domain", DNS_TXT); if (!is_array($dnsLookup)) { return self::POLICY_NONE; } $txtRecord = $dnsLookup[0]['txt'] ?? null; if (!$txtRecord) { // note // most DNS may not have this record // good to set policy to none in those cases return self::POLICY_NONE; } // Check for the presence of v=DMARC1; if (stripos($txtRecord, 'dmarc') === false) { // this is not a dmarc txt record // probably a wrong setup from the user return self::POLICY_NONE; } $cache = explode(';', $txtRecord); $dmarcInfo = []; foreach ($cache as $value) { $item = explode('=', $value); $dKey = $item[0] ?? ''; $dValue = $item[1] ?? ''; $dmarcInfo[strtolower(trim($dKey))] = strtolower(trim($dValue)); } // policy can either be reject or quarantine or none $dmarcStatus = $dmarcInfo['p'] ?? self::POLICY_NONE; // check for subdomain policy $dmarcStatus = ( isset($dmarcInfo['sp']) && ($dmarcInfo['sp'] === self::POLICY_QUARANTINE || $dmarcInfo['sp'] === self::POLICY_REJECT) ) ? $dmarcInfo['sp'] : $dmarcStatus; return $dmarcStatus; } }