<?php
/**
 * Script para verificar registros DNS SPF, DKIM y DMARC
 * Ayuda a diagnosticar problemas de deliverabilidad de emails
 */

header('Content-Type: text/html; charset=utf-8');
?>
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Verificación DNS - SIGVEM</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            max-width: 900px;
            margin: 20px auto;
            padding: 20px;
            background: #f5f5f5;
        }
        .container {
            background: white;
            padding: 30px;
            border-radius: 10px;
            box-shadow: 0 2px 10px rgba(0,0,0,0.1);
        }
        h1 {
            color: #333;
            border-bottom: 3px solid #0d6efd;
            padding-bottom: 10px;
        }
        .check {
            padding: 15px;
            margin: 10px 0;
            border-radius: 5px;
        }
        .success {
            background: #d4edda;
            color: #155724;
            border-left: 4px solid #28a745;
        }
        .error {
            background: #f8d7da;
            color: #721c24;
            border-left: 4px solid #dc3545;
        }
        .warning {
            background: #fff3cd;
            color: #856404;
            border-left: 4px solid #ffc107;
        }
        .info {
            background: #d1ecf1;
            color: #0c5460;
            border-left: 4px solid #17a2b8;
        }
        code {
            background: #f4f4f4;
            padding: 2px 6px;
            border-radius: 3px;
            font-family: 'Courier New', monospace;
            word-break: break-all;
        }
        table {
            width: 100%;
            border-collapse: collapse;
            margin: 15px 0;
        }
        table th, table td {
            padding: 10px;
            text-align: left;
            border-bottom: 1px solid #ddd;
        }
        table th {
            background: #f8f9fa;
            font-weight: bold;
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>🔍 Verificación de Registros DNS</h1>
        <p>Este script verifica los registros DNS SPF, DKIM y DMARC de tu dominio.</p>
        
        <?php
        // Dominio a verificar (puedes cambiarlo)
        $domain = 'servicios-jjr.com';
        
        echo "<h2>Dominio: <code>$domain</code></h2>";
        
        // Verificar SPF
        echo "<h3>1. Registro SPF (Sender Policy Framework)</h3>";
        $spfRecords = @dns_get_record($domain, DNS_TXT);
        $spfFound = false;
        
        if ($spfRecords) {
            foreach ($spfRecords as $record) {
                if (isset($record['txt']) && stripos($record['txt'], 'v=spf1') !== false) {
                    $spfFound = true;
                    echo "<div class='check success'>";
                    echo "✓ <strong>Registro SPF encontrado:</strong><br>";
                    echo "<code>" . htmlspecialchars($record['txt']) . "</code>";
                    echo "</div>";
                    break;
                }
            }
        }
        
        if (!$spfFound) {
            echo "<div class='check error'>";
            echo "✗ <strong>Registro SPF no encontrado</strong><br>";
            echo "El dominio no tiene un registro SPF configurado. Esto puede causar que los emails sean rechazados como spam.<br><br>";
            echo "<strong>Ejemplo de registro SPF:</strong><br>";
            echo "<code>v=spf1 mx a:mail.servicios-jjr.com ~all</code><br><br>";
            echo "Contacta a tu hosting para configurar este registro.";
            echo "</div>";
        }
        
        // Verificar DMARC
        echo "<h3>2. Registro DMARC (Domain-based Message Authentication)</h3>";
        $dmarcDomain = '_dmarc.' . $domain;
        $dmarcRecords = @dns_get_record($dmarcDomain, DNS_TXT);
        $dmarcFound = false;
        
        if ($dmarcRecords) {
            foreach ($dmarcRecords as $record) {
                if (isset($record['txt']) && stripos($record['txt'], 'v=DMARC1') !== false) {
                    $dmarcFound = true;
                    echo "<div class='check success'>";
                    echo "✓ <strong>Registro DMARC encontrado:</strong><br>";
                    echo "<code>" . htmlspecialchars($record['txt']) . "</code>";
                    echo "</div>";
                    break;
                }
            }
        }
        
        if (!$dmarcFound) {
            echo "<div class='check warning'>";
            echo "⚠️ <strong>Registro DMARC no encontrado</strong><br>";
            echo "El dominio no tiene un registro DMARC configurado. Esto puede afectar la deliverabilidad.<br><br>";
            echo "<strong>Ejemplo de registro DMARC:</strong><br>";
            echo "<code>v=DMARC1; p=none; rua=mailto:recuperamail@servicios-jjr.com</code><br><br>";
            echo "Contacta a tu hosting para configurar este registro.";
            echo "</div>";
        }
        
        // Verificar DKIM (más complejo, puede tener múltiples selectores)
        echo "<h3>3. Registro DKIM (DomainKeys Identicated Mail)</h3>";
        $dkimSelectors = ['default', 'mail', 'selector1', 'selector2'];
        $dkimFound = false;
        
        foreach ($dkimSelectors as $selector) {
            $dkimDomain = $selector . '._domainkey.' . $domain;
            $dkimRecords = @dns_get_record($dkimDomain, DNS_TXT);
            
            if ($dkimRecords) {
                foreach ($dkimRecords as $record) {
                    if (isset($record['txt']) && stripos($record['txt'], 'v=DKIM1') !== false) {
                        $dkimFound = true;
                        echo "<div class='check success'>";
                        echo "✓ <strong>Registro DKIM encontrado (selector: $selector):</strong><br>";
                        $dkimValue = substr($record['txt'], 0, 100) . '...';
                        echo "<code>" . htmlspecialchars($dkimValue) . "</code>";
                        echo "</div>";
                        break 2;
                    }
                }
            }
        }
        
        if (!$dkimFound) {
            echo "<div class='check warning'>";
            echo "⚠️ <strong>Registro DKIM no encontrado</strong><br>";
            echo "El dominio no tiene un registro DKIM configurado con los selectores comunes.<br><br>";
            echo "DKIM requiere configuración específica del servidor de correo. Contacta a tu hosting para obtener el selector y la clave DKIM correctos.";
            echo "</div>";
        }
        
        // Resumen
        echo "<h2>📋 Resumen</h2>";
        
        $allConfigured = $spfFound && $dmarcFound && $dkimFound;
        
        if ($allConfigured) {
            echo "<div class='check success'>";
            echo "<strong>✅ Todos los registros DNS están configurados correctamente.</strong><br>";
            echo "Si aún tienes problemas con el error 550 SPAM, el problema probablemente es una restricción del hosting para enviar a dominios externos.";
            echo "</div>";
        } else {
            echo "<div class='check warning'>";
            echo "<strong>⚠️ Faltan algunos registros DNS:</strong><ul>";
            if (!$spfFound) echo "<li>SPF no configurado</li>";
            if (!$dmarcFound) echo "<li>DMARC no configurado</li>";
            if (!$dkimFound) echo "<li>DKIM no configurado</li>";
            echo "</ul>";
            echo "Contacta a tu hosting para configurar estos registros. Esto puede ayudar a resolver el error 550 SPAM.";
            echo "</div>";
        }
        
        echo "<div class='check info'>";
        echo "<strong>ℹ️ Nota importante:</strong><br>";
        echo "Incluso con todos los registros DNS configurados, muchos hostings compartidos tienen restricciones para enviar a dominios externos. Si el problema persiste después de configurar DNS, considera usar un servicio de email transaccional.";
        echo "</div>";
        ?>
        
        <hr>
        <p style="text-align: center; color: #666;">
            <small>Script de verificación DNS - SIGVEM | <?php echo date('Y'); ?></small>
        </p>
    </div>
</body>
</html>

