<?php
/**
 * Script de prueba para verificar la configuración SMTP
 * Accede a: https://tudominio.com/test-smtp.php
 */

require_once 'config/email-config.php';
require_once 'config/smtp-mailer.php';

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>Prueba SMTP - SIGVEM</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            max-width: 800px;
            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;
        }
        .success {
            background: #d4edda;
            color: #155724;
            padding: 15px;
            border-radius: 5px;
            margin: 10px 0;
            border-left: 4px solid #28a745;
        }
        .error {
            background: #f8d7da;
            color: #721c24;
            padding: 15px;
            border-radius: 5px;
            margin: 10px 0;
            border-left: 4px solid #dc3545;
        }
        .info {
            background: #d1ecf1;
            color: #0c5460;
            padding: 15px;
            border-radius: 5px;
            margin: 10px 0;
            border-left: 4px solid #17a2b8;
        }
        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;
        }
        code {
            background: #f4f4f4;
            padding: 2px 6px;
            border-radius: 3px;
            font-family: 'Courier New', monospace;
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>🔧 Prueba de Configuración SMTP</h1>
        
        <?php
        try {
            $config = getEmailConfig();
            $smtpConfig = $config['smtp'];
            
            echo "<h2>Configuración Actual</h2>";
            echo "<table>";
            echo "<tr><th>Parámetro</th><th>Valor</th></tr>";
            echo "<tr><td>Servidor SMTP</td><td><code>" . htmlspecialchars($smtpConfig['smtp_host']) . "</code></td></tr>";
            echo "<tr><td>Puerto</td><td><code>" . htmlspecialchars($smtpConfig['smtp_port']) . "</code></td></tr>";
            echo "<tr><td>Usuario</td><td><code>" . htmlspecialchars($smtpConfig['smtp_username']) . "</code></td></tr>";
            echo "<tr><td>Contraseña</td><td><code>" . (empty($smtpConfig['smtp_password']) ? '<em>No configurada</em>' : '***' . substr($smtpConfig['smtp_password'], -3)) . "</code></td></tr>";
            echo "<tr><td>Encriptación</td><td><code>" . htmlspecialchars($smtpConfig['smtp_encryption']) . "</code></td></tr>";
            echo "<tr><td>SMTP Habilitado</td><td><code>" . ($smtpConfig['use_smtp'] ? 'Sí' : 'No') . "</code></td></tr>";
            echo "</table>";
            
            if (empty($smtpConfig['smtp_password'])) {
                echo "<div class='error'>";
                echo "⚠️ <strong>Error:</strong> La contraseña SMTP no está configurada. Edita <code>config/email-config.php</code> y configura <code>\$smtp_password</code>";
                echo "</div>";
                exit;
            }
            
            // Formulario para ingresar email de destino
            $testEmail = isset($_POST['test_email']) ? trim($_POST['test_email']) : $smtpConfig['smtp_username'];
            $sendTest = isset($_POST['send_test']) && $_POST['send_test'] === '1';
            
            echo "<h2>Prueba de Envío de Email SMTP</h2>";
            
            if (!$sendTest) {
                // Mostrar formulario
                echo "<form method='POST' style='background: #f8f9fa; padding: 20px; border-radius: 5px; margin: 20px 0;'>";
                echo "<div style='margin-bottom: 15px;'>";
                echo "<label for='test_email' style='display: block; margin-bottom: 5px; font-weight: bold;'>Email de destino para la prueba:</label>";
                echo "<input type='email' id='test_email' name='test_email' value='" . htmlspecialchars($testEmail) . "' required style='width: 100%; padding: 8px; border: 1px solid #ddd; border-radius: 4px; box-sizing: border-box;'>";
                echo "<small style='color: #666;'>Por defecto se enviará a: <code>" . htmlspecialchars($smtpConfig['smtp_username']) . "</code></small>";
                echo "</div>";
                echo "<button type='submit' name='send_test' value='1' style='background: #0d6efd; color: white; padding: 10px 20px; border: none; border-radius: 5px; cursor: pointer; font-size: 16px;'>📧 Enviar Email de Prueba</button>";
                echo "</form>";
            } else {
                // Crear instancia de SMTPMailer
                $mailer = new SMTPMailer(
                    $smtpConfig['smtp_host'],
                    $smtpConfig['smtp_port'],
                    $smtpConfig['smtp_username'],
                    $smtpConfig['smtp_password'],
                    $smtpConfig['smtp_encryption']
                );
                
                echo "<div class='info'>";
                echo "🔄 Intentando conectar a <code>" . htmlspecialchars($smtpConfig['smtp_host']) . ":" . htmlspecialchars($smtpConfig['smtp_port']) . "</code>...";
                echo "</div>";
                
                $subject = "Prueba SMTP SIGVEM - " . date('Y-m-d H:i:s');
                $message = "Este es un email de prueba del sistema SIGVEM.\n\n";
                $message .= "Si recibes este correo, la configuración SMTP está funcionando correctamente.\n\n";
                $message .= "Configuración utilizada:\n";
                $message .= "- Servidor: " . $smtpConfig['smtp_host'] . "\n";
                $message .= "- Puerto: " . $smtpConfig['smtp_port'] . "\n";
                $message .= "- Encriptación: " . $smtpConfig['smtp_encryption'] . "\n";
                $message .= "- Fecha: " . date('Y-m-d H:i:s') . "\n";
                
                $htmlMessage = "<html><body style='font-family: Arial, sans-serif;'>";
                $htmlMessage .= "<div style='max-width: 600px; margin: 0 auto; padding: 20px;'>";
                $htmlMessage .= "<h2 style='color: #0d6efd;'>✅ Prueba SMTP SIGVEM</h2>";
                $htmlMessage .= "<p>Este es un email de prueba del sistema SIGVEM.</p>";
                $htmlMessage .= "<p><strong>Si recibes este correo, la configuración SMTP está funcionando correctamente.</strong></p>";
                $htmlMessage .= "<div style='background: #f8f9fa; padding: 15px; border-radius: 5px; margin: 20px 0;'>";
                $htmlMessage .= "<h3 style='margin-top: 0;'>Configuración utilizada:</h3>";
                $htmlMessage .= "<ul>";
                $htmlMessage .= "<li><strong>Servidor:</strong> " . htmlspecialchars($smtpConfig['smtp_host']) . "</li>";
                $htmlMessage .= "<li><strong>Puerto:</strong> " . htmlspecialchars($smtpConfig['smtp_port']) . "</li>";
                $htmlMessage .= "<li><strong>Encriptación:</strong> " . htmlspecialchars($smtpConfig['smtp_encryption']) . "</li>";
                $htmlMessage .= "<li><strong>Fecha:</strong> " . date('Y-m-d H:i:s') . "</li>";
                $htmlMessage .= "</ul>";
                $htmlMessage .= "</div>";
                $htmlMessage .= "<p style='color: #666; font-size: 12px;'>Este es un email automático del sistema SIGVEM. No responda a este mensaje.</p>";
                $htmlMessage .= "</div></body></html>";
                
                $fromEmail = $config['sender']['from_email'];
                $fromName = $config['sender']['from_name'];
                
                $result = $mailer->send($testEmail, $subject, $message, $fromEmail, $fromName, $htmlMessage);
            
                if ($result) {
                    echo "<div class='success'>";
                    echo "✅ <strong>¡Éxito!</strong> El email de prueba se envió correctamente.<br><br>";
                    echo "📧 <strong>Email enviado a:</strong> <code>" . htmlspecialchars($testEmail) . "</code><br>";
                    echo "📅 <strong>Fecha y hora:</strong> " . date('Y-m-d H:i:s') . "<br><br>";
                    echo "🔍 <strong>Próximos pasos:</strong><br>";
                    echo "1. Revisa la bandeja de entrada de <code>" . htmlspecialchars($testEmail) . "</code><br>";
                    echo "2. Si no aparece en la bandeja principal, revisa la carpeta de <strong>spam/correo no deseado</strong><br>";
                    echo "3. El email puede tardar unos minutos en llegar<br><br>";
                    echo "✅ <strong>Conclusión:</strong> Tu configuración SMTP está funcionando correctamente. El sistema puede enviar correos electrónicos.";
                    echo "</div>";
                    
                    echo "<div style='margin-top: 20px;'>";
                    echo "<a href='test-smtp.php' style='background: #0d6efd; color: white; padding: 10px 20px; text-decoration: none; border-radius: 5px; display: inline-block;'>🔄 Enviar otra prueba</a>";
                    echo "</div>";
                } else {
                    $errorDetail = $mailer->getLastError();
                    echo "<div class='error'>";
                    echo "❌ <strong>Error:</strong> No se pudo enviar el email de prueba.<br><br>";
                    
                    if (!empty($errorDetail)) {
                        echo "<strong>Detalle del error:</strong><br>";
                        echo "<code style='background: #fff; padding: 10px; display: block; margin: 10px 0; border: 1px solid #ddd; border-radius: 4px; white-space: pre-wrap;'>" . htmlspecialchars($errorDetail) . "</code><br>";
                    }
                    
                    // Detectar tipo de error específico
                    $isAuthError = stripos($errorDetail, 'autenticación') !== false || 
                                   stripos($errorDetail, 'authentication') !== false ||
                                   stripos($errorDetail, '535') !== false ||
                                   stripos($errorDetail, 'credenciales') !== false;
                    
                    $isSpamError = stripos($errorDetail, '550') !== false || 
                                   stripos($errorDetail, 'SPAM') !== false ||
                                   stripos($errorDetail, 'spam') !== false ||
                                   stripos($errorDetail, 'clasificado como') !== false;
                    
                    if ($isSpamError) {
                        echo "<div style='background: #f8d7da; padding: 15px; border-left: 4px solid #dc3545; border-radius: 4px; margin: 15px 0;'>";
                        echo "<strong>🚫 Error 550 - Mensaje Clasificado como SPAM</strong><br><br>";
                        echo "El servidor SMTP rechazó el mensaje porque lo considera spam. Esto es común cuando:<br><br>";
                        echo "<strong>1. Restricciones para dominios externos:</strong><br>";
                        echo "• Muchos hostings restringen el envío a dominios externos (hotmail.com, gmail.com, etc.)<br>";
                        echo "• Pueden permitir solo envíos al mismo dominio del hosting<br>";
                        echo "• <strong>Nota:</strong> Si funciona con <code>recuperamail@servicios-jjr.com</code> pero no con <code>frisher123@hotmail.com</code>, esto confirma la restricción<br><br>";
                        echo "<strong>2. Falta configuración SPF/DKIM/DMARC:</strong><br>";
                        echo "• El dominio necesita registros DNS SPF, DKIM y DMARC configurados<br>";
                        echo "• Sin estos registros, los servidores de correo externos pueden rechazar los mensajes<br>";
                        echo "• Contacta al hosting para configurar estos registros<br><br>";
                        echo "<strong>3. Políticas anti-spam del servidor:</strong><br>";
                        echo "• El servidor SMTP tiene políticas muy estrictas contra spam<br>";
                        echo "• Puede requerir whitelist de dominios permitidos<br>";
                        echo "• Puede requerir verificación adicional del remitente<br><br>";
                        echo "<strong>✅ Soluciones:</strong><br>";
                        echo "1. <strong>Contacta al hosting</strong> y pregunta:<br>";
                        echo "&nbsp;&nbsp;• ¿Hay restricciones para enviar a dominios externos?<br>";
                        echo "&nbsp;&nbsp;• ¿Pueden configurar SPF/DKIM/DMARC para tu dominio?<br>";
                        echo "&nbsp;&nbsp;• ¿Hay una whitelist de dominios permitidos?<br>";
                        echo "2. <strong>Verifica los registros DNS</strong> de tu dominio<br>";
                        echo "3. <strong>Considera usar un servicio de email transaccional</strong> como SendGrid, Mailgun, o Amazon SES<br>";
                        echo "</div>";
                    } elseif ($isAuthError) {
                        echo "<div style='background: #fff3cd; padding: 15px; border-left: 4px solid #ffc107; border-radius: 4px; margin: 15px 0;'>";
                        echo "<strong>🔐 Error de Autenticación Detectado</strong><br><br>";
                        echo "El servidor SMTP rechazó las credenciales. Esto puede deberse a:<br><br>";
                        echo "<strong>1. Credenciales incorrectas:</strong><br>";
                        echo "• Verifica que el usuario sea: <code>" . htmlspecialchars($smtpConfig['smtp_username']) . "</code><br>";
                        echo "• Verifica que la contraseña sea correcta en <code>config/email-config.php</code><br>";
                        echo "• Algunos hostings requieren la contraseña completa del email, no una contraseña de aplicación<br><br>";
                        echo "<strong>2. Formato de usuario incorrecto:</strong><br>";
                        echo "• Algunos servidores requieren solo el nombre de usuario (sin @dominio.com)<br>";
                        echo "• Otros requieren el email completo<br>";
                        echo "• Prueba ambos formatos en <code>config/email-config.php</code><br><br>";
                        echo "<strong>3. Cuenta bloqueada o restricciones:</strong><br>";
                        echo "• Verifica que la cuenta de email esté activa<br>";
                        echo "• Algunos hostings bloquean SMTP desde IPs externas<br>";
                        echo "• Contacta al soporte de tu hosting para verificar permisos SMTP<br>";
                        echo "</div>";
                    }
                    
                    echo "<strong>📋 Soluciones a probar:</strong><ul>";
                    echo "<li><strong>1. Verificar credenciales:</strong><br>";
                    echo "&nbsp;&nbsp;• Abre <code>config/email-config.php</code><br>";
                    echo "&nbsp;&nbsp;• Verifica que <code>smtp_username</code> y <code>smtp_password</code> sean correctos<br>";
                    echo "&nbsp;&nbsp;• Prueba iniciar sesión en el webmail con las mismas credenciales<br>";
                    echo "</li>";
                    echo "<li><strong>2. Probar servidor alternativo:</strong> Cambia en <code>config/email-config.php</code> el <code>smtp_host</code> a:<ul>";
                    echo "<li><code>smtp.servicios-jjr.com</code></li>";
                    echo "<li><code>mail.servicios-jjr.com</code> (actual)</li>";
                    echo "<li><code>localhost</code> (si el servidor SMTP está en el mismo servidor)</li>";
                    echo "</ul></li>";
                    echo "<li><strong>3. Probar puerto alternativo:</strong> Si el puerto 587 no funciona, prueba:<ul>";
                    echo "<li>Puerto <code>465</code> con encriptación <code>ssl</code> (cambiar <code>smtp_port = 465</code> y <code>smtp_encryption = 'ssl'</code>)</li>";
                    echo "<li>Puerto <code>25</code> sin encriptación (cambiar <code>smtp_port = 25</code> y <code>smtp_encryption = ''</code>)</li>";
                    echo "</ul></li>";
                    echo "<li><strong>4. Contactar al hosting:</strong><br>";
                    echo "&nbsp;&nbsp;• Pregunta por la configuración SMTP correcta para tu dominio<br>";
                    echo "&nbsp;&nbsp;• Solicita que verifiquen si hay restricciones de IP o autenticación<br>";
                    echo "&nbsp;&nbsp;• Pregunta si el email requiere algún formato especial para SMTP<br>";
                    echo "</li>";
                    echo "</ul>";
                    echo "</div>";
                    
                    echo "<div style='margin-top: 20px;'>";
                    echo "<a href='test-smtp.php' style='background: #0d6efd; color: white; padding: 10px 20px; text-decoration: none; border-radius: 5px; display: inline-block; margin-right: 10px;'>🔄 Intentar de nuevo</a>";
                    echo "<a href='diagnostico-email.php' style='background: #6c757d; color: white; padding: 10px 20px; text-decoration: none; border-radius: 5px; display: inline-block;'>🔍 Ver diagnóstico completo</a>";
                    echo "</div>";
                }
            }
            
        } catch (Exception $e) {
            echo "<div class='error'>";
            echo "✗ <strong>Error:</strong> " . htmlspecialchars($e->getMessage());
            echo "</div>";
        }
        ?>
        
        <hr>
        <h2>📚 Recursos Adicionales</h2>
        <div class='info'>
            <p><strong>Para más información sobre cómo resolver el error 550 SPAM:</strong></p>
            <ul>
                <li><a href="solucion-error-550-spam.md" target="_blank">📖 Guía completa de solución (solucion-error-550-spam.md)</a></li>
                <li><a href="verificar-dns.php" target="_blank">🔍 Verificar registros DNS (verificar-dns.php)</a></li>
                <li><a href="diagnostico-email.php" target="_blank">🔧 Diagnóstico completo de email (diagnostico-email.php)</a></li>
            </ul>
        </div>
        
        <hr>
        <h2>💡 Recomendaciones</h2>
        <div class='info'>
            <p><strong>Si el servidor SMTP no funciona, prueba estas alternativas:</strong></p>
            <ul>
                <li><code>mail.servicios-jjr.com</code> (actual)</li>
                <li><code>smtp.servicios-jjr.com</code></li>
                <li><code>localhost</code> (si el servidor SMTP está en el mismo servidor)</li>
            </ul>
            <p><strong>Si el puerto 587 no funciona:</strong></p>
            <ul>
                <li>Prueba puerto <code>465</code> con encriptación <code>ssl</code></li>
                <li>Prueba puerto <code>25</code> sin encriptación (cambiar a <code>''</code> o <code>null</code>)</li>
            </ul>
            <p><strong>⚠️ Si recibes error 550 SPAM al enviar a dominios externos:</strong></p>
            <ul>
                <li><strong>Problema común:</strong> Muchos hostings restringen el envío a dominios externos (hotmail.com, gmail.com, etc.)</li>
                <li><strong>Solución 1:</strong> Contacta al hosting para verificar restricciones y solicitar configuración SPF/DKIM/DMARC</li>
                <li><strong>Solución 2:</strong> Considera usar un servicio de email transaccional (SendGrid, Mailgun, Amazon SES) para envíos a dominios externos</li>
                <li><strong>Nota:</strong> Si funciona con emails del mismo dominio pero no con externos, es una restricción del hosting</li>
            </ul>
            <p><strong>Contacta a tu proveedor de hosting</strong> para obtener la configuración SMTP correcta y verificar restricciones de envío.</p>
        </div>
        
        <p style="text-align: center; color: #666; margin-top: 30px;">
            <small>Script de prueba SMTP - SIGVEM | <?php echo date('Y'); ?></small>
        </p>
    </div>
</body>
</html>

