<?php
/**
 * painel-email.php
 * Painel simples para testar envio de e-mail de duas formas:
 *   1) mail() nativo do PHP (usa o sendmail/postfix configurado no servidor)
 *   2) SMTP direto (autenticado), sem precisar de biblioteca externa
 *
 * SEGURANÇA — LEIA ANTES DE USAR:
 * - Troque a senha abaixo (PAINEL_SENHA) antes de subir pro servidor.
 * - Depois de terminar os testes, APAGUE este arquivo do site.
 * - Não deixe esse painel público por muito tempo: qualquer pessoa que
 *   descobrir a URL e a senha pode usá-lo para mandar e-mail em nome do seu domínio.
 */

session_start();

// ===================== CONFIGURAÇÃO =====================

define('PAINEL_SENHA', '123abcd'); // <-- TROQUE ISSO

// Domínio detectado automaticamente (usado como remetente padrão no método sendmail)
$dominio = preg_replace('/^www\./', '', $_SERVER['HTTP_HOST'] ?? 'localhost');
$remetente_padrao = "nao-responda@{$dominio}";

// ===================== LOGIN SIMPLES =====================

if (isset($_POST['login_senha'])) {
    if ($_POST['login_senha'] === PAINEL_SENHA) {
        $_SESSION['autenticado'] = true;
    } else {
        $erro_login = "Senha incorreta.";
    }
}

if (empty($_SESSION['autenticado'])) {
    ?>
    <!DOCTYPE html>
    <html lang="pt-br">
    <head><meta charset="UTF-8"><title>Login</title></head>
    <body style="font-family: sans-serif; max-width:400px; margin:80px auto;">
        <h2>Painel de E-mail</h2>
        <?php if (!empty($erro_login)): ?>
            <p style="color:red;"><?= htmlspecialchars($erro_login) ?></p>
        <?php endif; ?>
        <form method="post">
            <input type="password" name="login_senha" placeholder="Senha" style="width:100%;padding:8px;" required>
            <button type="submit" style="margin-top:10px;padding:8px 16px;">Entrar</button>
        </form>
    </body>
    </html>
    <?php
    exit;
}

// ===================== FUNÇÃO: ENVIO VIA SMTP (sem bibliotecas) =====================

function enviarViaSMTP(array $cfg, string $destino, string $assunto, string $corpoHtml, ?string &$log = ''): bool {
    $host = $cfg['host'];
    $port = (int)$cfg['port'];
    $user = $cfg['user'];
    $pass = $cfg['pass'];
    $seguranca = $cfg['seguranca']; // 'tls', 'ssl' ou 'nenhuma'
    $remetenteEmail = $cfg['remetente_email'];
    $remetenteNome  = $cfg['remetente_nome'];

    $transporte = ($seguranca === 'ssl') ? 'ssl://' : '';
    $conexao = @fsockopen($transporte . $host, $port, $errno, $errstr, 15);
    if (!$conexao) {
        $log .= "Falha ao conectar: {$errstr} ({$errno})\n";
        return false;
    }

    $ler = function () use ($conexao, &$log) {
        $resp = '';
        while ($linha = fgets($conexao, 515)) {
            $resp .= $linha;
            if (substr($linha, 3, 1) === ' ') break;
        }
        $log .= $resp;
        return $resp;
    };

    $escrever = function ($cmd) use ($conexao, &$log) {
        fwrite($conexao, $cmd . "\r\n");
        $log .= "> " . preg_replace('/AUTH LOGIN.*|^[A-Za-z0-9+\/=]{20,}$/', '[oculto]', $cmd) . "\n";
    };

    $ler(); // saudação do servidor
    $escrever("EHLO {$host}");
    $ler();

    if ($seguranca === 'tls') {
        $escrever("STARTTLS");
        $ler();
        if (!stream_socket_enable_crypto($conexao, true, STREAM_CRYPTO_METHOD_TLS_CLIENT)) {
            $log .= "Falha ao iniciar TLS\n";
            fclose($conexao);
            return false;
        }
        $escrever("EHLO {$host}");
        $ler();
    }

    if (!empty($user)) {
        $escrever("AUTH LOGIN");
        $ler();
        $escrever(base64_encode($user));
        $ler();
        $escrever(base64_encode($pass));
        $respAuth = $ler();
        if (strpos($respAuth, '235') !== 0 && strpos($respAuth, '235') === false) {
            $log .= "Falha na autenticação SMTP\n";
            fclose($conexao);
            return false;
        }
    }

    $escrever("MAIL FROM:<{$remetenteEmail}>");
    $ler();
    $escrever("RCPT TO:<{$destino}>");
    $ler();
    $escrever("DATA");
    $ler();

    $headers = "From: {$remetenteNome} <{$remetenteEmail}>\r\n";
    $headers .= "To: <{$destino}>\r\n";
    $headers .= "Subject: {$assunto}\r\n";
    $headers .= "MIME-Version: 1.0\r\n";
    $headers .= "Content-Type: text/html; charset=UTF-8\r\n";

    $dados = $headers . "\r\n" . $corpoHtml . "\r\n.";
    $escrever($dados);
    $respFinal = $ler();

    $escrever("QUIT");
    fclose($conexao);

    return (strpos($respFinal, '250') !== false);
}

// ===================== PROCESSAMENTO DO FORMULÁRIO =====================

$resultado = null;
$logSmtp = '';

if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['acao']) && $_POST['acao'] === 'enviar') {

    $destinatario = trim($_POST['destinatario'] ?? '');
    $assunto      = trim($_POST['assunto'] ?? '');
    $corpoHtml    = $_POST['corpo_html'] ?? '';
    $metodo       = $_POST['metodo'] ?? 'sendmail';

    if (!filter_var($destinatario, FILTER_VALIDATE_EMAIL)) {
        $resultado = ['ok' => false, 'msg' => 'E-mail de destino inválido.'];
    } elseif ($assunto === '' || $corpoHtml === '') {
        $resultado = ['ok' => false, 'msg' => 'Preencha assunto e corpo do e-mail.'];
    } else {

        if ($metodo === 'sendmail') {
            // Usa o mail() do PHP, que por sua vez usa o sendmail/postfix do servidor
            $headers   = [];
            $headers[] = "From: {$dominio} <{$remetente_padrao}>";
            $headers[] = "MIME-Version: 1.0";
            $headers[] = "Content-Type: text/html; charset=UTF-8";
            $ok = mail($destinatario, $assunto, $corpoHtml, implode("\r\n", $headers));
            $resultado = ['ok' => $ok, 'msg' => $ok ? 'Enviado via mail()/sendmail local.' : 'Falha ao enviar via mail() local.'];

        } else { // metodo === 'smtp'
            $cfgSmtp = [
                'host' => trim($_POST['smtp_host'] ?? ''),
                'port' => trim($_POST['smtp_port'] ?? '587'),
                'user' => trim($_POST['smtp_user'] ?? ''),
                'pass' => $_POST['smtp_pass'] ?? '',
                'seguranca' => $_POST['smtp_seguranca'] ?? 'tls',
                'remetente_email' => trim($_POST['smtp_remetente_email'] ?? $remetente_padrao),
                'remetente_nome'  => trim($_POST['smtp_remetente_nome'] ?? $dominio),
            ];
            $ok = enviarViaSMTP($cfgSmtp, $destinatario, $assunto, $corpoHtml, $logSmtp);
            $resultado = ['ok' => $ok, 'msg' => $ok ? 'Enviado via SMTP.' : 'Falha ao enviar via SMTP.'];
        }
    }
}

// Guarda os últimos valores pra repopular o formulário
$v = fn($campo, $default = '') => htmlspecialchars($_POST[$campo] ?? $default);
?>
<!DOCTYPE html>
<html lang="pt-br">
<head>
<meta charset="UTF-8">
<title>Painel de Envio de E-mail</title>
<style>
    body { font-family: Arial, sans-serif; max-width: 700px; margin: 40px auto; padding: 0 15px; color:#222; }
    label { display:block; margin-top:14px; font-weight:bold; }
    input[type=text], input[type=email], input[type=password], input[type=number], select, textarea {
        width:100%; padding:8px; box-sizing:border-box; margin-top:4px; border:1px solid #ccc; border-radius:4px;
    }
    textarea { height:180px; font-family: monospace; }
    button { margin-top:18px; padding:10px 20px; background:#2563eb; color:#fff; border:none; border-radius:4px; cursor:pointer; }
    .box-smtp { border:1px solid #ddd; padding:12px; margin-top:14px; border-radius:6px; background:#fafafa; }
    .msg-ok { background:#e6ffed; border:1px solid #34c759; padding:10px; border-radius:6px; margin-top:20px; }
    .msg-erro { background:#ffe9e9; border:1px solid #ff3b30; padding:10px; border-radius:6px; margin-top:20px; }
    pre { background:#111; color:#0f0; padding:10px; overflow:auto; font-size:12px; border-radius:6px; }
    .aviso { font-size:12px; color:#888; margin-top:30px; }
</style>
<script>
function alternarMetodo() {
    var metodo = document.getElementById('metodo').value;
    document.getElementById('bloco-smtp').style.display = (metodo === 'smtp') ? 'block' : 'none';
}
</script>
</head>
<body>

<h2>Painel de Envio de E-mail — <?= htmlspecialchars($dominio) ?></h2>

<?php if ($resultado): ?>
    <div class="<?= $resultado['ok'] ? 'msg-ok' : 'msg-erro' ?>">
        <?= $resultado['ok'] ? '✅' : '❌' ?> <?= htmlspecialchars($resultado['msg']) ?>
    </div>
    <?php if ($logSmtp): ?>
        <p>Log da conversa SMTP:</p>
        <pre><?= htmlspecialchars($logSmtp) ?></pre>
    <?php endif; ?>
<?php endif; ?>

<form method="post">
    <input type="hidden" name="acao" value="enviar">

    <label>Destinatário</label>
    <input type="email" name="destinatario" value="<?= $v('destinatario') ?>" required>

    <label>Assunto</label>
    <input type="text" name="assunto" value="<?= $v('assunto') ?>" required>

    <label>Corpo do e-mail (HTML)</label>
    <textarea name="corpo_html" required placeholder="<h1>Olá!</h1><p>Este é um teste.</p>"><?= $v('corpo_html') ?></textarea>

    <label>Método de envio</label>
    <select name="metodo" id="metodo" onchange="alternarMetodo()">
        <option value="sendmail" <?= ($_POST['metodo'] ?? '') === 'sendmail' ? 'selected' : '' ?>>mail() / Sendmail / Postfix do servidor</option>
        <option value="smtp" <?= ($_POST['metodo'] ?? '') === 'smtp' ? 'selected' : '' ?>>SMTP autenticado</option>
    </select>

    <div id="bloco-smtp" class="box-smtp" style="display:none;">
        <label>Host SMTP</label>
        <input type="text" name="smtp_host" value="<?= $v('smtp_host') ?>" placeholder="smtp.seudominio.com">

        <label>Porta</label>
        <input type="number" name="smtp_port" value="<?= $v('smtp_port', '587') ?>">

        <label>Segurança</label>
        <select name="smtp_seguranca">
            <option value="tls" <?= ($_POST['smtp_seguranca'] ?? 'tls') === 'tls' ? 'selected' : '' ?>>TLS (porta 587, mais comum)</option>
            <option value="ssl" <?= ($_POST['smtp_seguranca'] ?? '') === 'ssl' ? 'selected' : '' ?>>SSL (porta 465)</option>
            <option value="nenhuma" <?= ($_POST['smtp_seguranca'] ?? '') === 'nenhuma' ? 'selected' : '' ?>>Nenhuma</option>
        </select>

        <label>Usuário SMTP</label>
        <input type="text" name="smtp_user" value="<?= $v('smtp_user') ?>" placeholder="usuario@seudominio.com">

        <label>Senha SMTP</label>
        <input type="password" name="smtp_pass" placeholder="senha">

        <label>Nome do remetente</label>
        <input type="text" name="smtp_remetente_nome" value="<?= $v('smtp_remetente_nome', $dominio) ?>">

        <label>E-mail do remetente</label>
        <input type="email" name="smtp_remetente_email" value="<?= $v('smtp_remetente_email', $remetente_padrao) ?>">
    </div>

    <button type="submit">Enviar e-mail</button>
</form>

<p class="aviso">
    Painel protegido por senha simples — troque a senha em PAINEL_SENHA no início do arquivo antes de subir pro servidor,
    e apague este arquivo do site depois de terminar os testes.
</p>

<script>alternarMetodo();</script>
</body>
</html>
