760 lines
48 KiB
PHP
Executable File
760 lines
48 KiB
PHP
Executable File
<?php
|
|
$pdo = new PDO('pgsql:host=localhost;dbname=adx_system', 'admin', 'admin123');
|
|
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
|
|
|
// Stats
|
|
$stats = ['configs' => 0, 'winners' => 0, 'tests' => 0, 'inbox_rate' => '-', 'seeds' => 0, 'isp' => 0];
|
|
try { $stats['configs'] = $pdo->query("SELECT COUNT(*) FROM admin.brain_configs")->fetchColumn() ?: 0; } catch(Exception $e) {}
|
|
try { $stats['winners'] = $pdo->query("SELECT COUNT(*) FROM admin.brain_winners")->fetchColumn() ?: 0; } catch(Exception $e) {}
|
|
try { $stats['tests'] = $pdo->query("SELECT COUNT(*) FROM admin.brain_test_results")->fetchColumn() ?: 0; } catch(Exception $e) {}
|
|
try { $stats['seeds'] = $pdo->query("SELECT COUNT(*) FROM admin.brain_seeds")->fetchColumn() ?: 0; } catch(Exception $e) {}
|
|
try { $stats['isp'] = $pdo->query("SELECT COUNT(*) FROM admin.isp_profiles")->fetchColumn() ?: 0; } catch(Exception $e) {}
|
|
try {
|
|
$avg = $pdo->query("SELECT AVG(inbox_rate) FROM admin.brain_configs WHERE inbox_rate > 0")->fetchColumn();
|
|
if ($avg) $stats['inbox_rate'] = round($avg, 1) . '%';
|
|
} catch(Exception $e) {}
|
|
|
|
// Action handlers
|
|
$message = '';
|
|
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
|
|
$action = $_POST['action'] ?? '';
|
|
|
|
if ($action === 'create_config') {
|
|
$isp_target = $_POST['isp_target'] ?? 'GMAIL';
|
|
$method = $_POST['send_method'] ?? 'OFFICE_365';
|
|
$from_name = $_POST['from_name'] ?? '';
|
|
$from_email = $_POST['from_email'] ?? '';
|
|
$subject_template = $_POST['subject_template'] ?? '';
|
|
$body_template = $_POST['body_template'] ?? '';
|
|
$return_path = $_POST['return_path'] ?? '';
|
|
$domain_used = $_POST['domain_used'] ?? '';
|
|
$reply_to = $_POST['reply_to'] ?? '';
|
|
$content_type = $_POST['content_type'] ?? 'text/html; charset=utf-8';
|
|
$encoding = $_POST['encoding'] ?? 'quoted-printable';
|
|
$h1_name = $_POST['header_1_name'] ?? '';
|
|
$h1_value = $_POST['header_1_value'] ?? '';
|
|
$h2_name = $_POST['header_2_name'] ?? '';
|
|
$h2_value = $_POST['header_2_value'] ?? '';
|
|
$hash = md5($isp_target . $method . $from_email . time());
|
|
|
|
$stmt = $pdo->prepare("INSERT INTO admin.brain_configs (config_hash, isp_target, send_method, from_name, from_email, subject_template, body_template, return_path, domain_used, reply_to, content_type, encoding, header_1_name, header_1_value, header_2_name, header_2_value, source) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, 'manual')");
|
|
$stmt->execute([$hash, $isp_target, $method, $from_name, $from_email, $subject_template, $body_template, $return_path, $domain_used, $reply_to, $content_type, $encoding, $h1_name, $h1_value, $h2_name, $h2_value]);
|
|
$message = '✅ Configuration créée!';
|
|
}
|
|
|
|
if ($action === 'delete_config') {
|
|
$id = (int)$_POST['id'];
|
|
$pdo->exec("DELETE FROM admin.brain_configs WHERE id = $id");
|
|
$message = '✅ Configuration supprimée!';
|
|
}
|
|
}
|
|
|
|
// Charger les données complètes
|
|
$configs = $pdo->query("SELECT * FROM admin.brain_configs ORDER BY id DESC")->fetchAll(PDO::FETCH_ASSOC);
|
|
$winners = [];
|
|
try { $winners = $pdo->query("SELECT w.*, c.send_method, c.from_email, c.domain_used, c.subject_template FROM admin.brain_winners w LEFT JOIN admin.brain_configs c ON w.config_id = c.id ORDER BY w.inbox_rate DESC LIMIT 20")->fetchAll(PDO::FETCH_ASSOC); } catch(Exception $e) {}
|
|
$tests = [];
|
|
try { $tests = $pdo->query("SELECT * FROM admin.brain_test_results ORDER BY created_at DESC LIMIT 50")->fetchAll(PDO::FETCH_ASSOC); } catch(Exception $e) { error_log($e->getMessage()); }
|
|
$isp_profiles = [];
|
|
$isp_indexed = [];
|
|
try {
|
|
$isp_profiles = $pdo->query("SELECT * FROM admin.isp_profiles ORDER BY isp_name")->fetchAll(PDO::FETCH_ASSOC);
|
|
foreach ($isp_profiles as $isp) {
|
|
$isp_indexed[strtoupper($isp['isp_name'] ?? '')] = $isp;
|
|
$isp_indexed[$isp['isp_code'] ?? ''] = $isp;
|
|
}
|
|
} catch(Exception $e) {}
|
|
?>
|
|
<!DOCTYPE html>
|
|
<html><head>
|
|
<meta charset="UTF-8">
|
|
<title>Brain Manager - Configurations & Winners</title>
|
|
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" rel="stylesheet">
|
|
<style>
|
|
*{margin:0;padding:0;box-sizing:border-box}
|
|
body{font-family:'Segoe UI',system-ui,sans-serif;background:#0a0a0f;color:#e2e8f0;min-height:100vh;padding:20px}
|
|
h1{color:#f59e0b;margin-bottom:10px;display:flex;align-items:center;gap:10px}
|
|
.back-link{color:#5eead4;text-decoration:none;display:inline-block;margin-bottom:20px}
|
|
.back-link:hover{text-decoration:underline}
|
|
|
|
/* Process Box */
|
|
.process-box{background:linear-gradient(135deg,#12121a 0%,#1a1025 100%);border-radius:16px;padding:25px;margin-bottom:25px;border:1px solid #f59e0b30}
|
|
.process-title{color:#f59e0b;margin-bottom:20px;font-size:1.2rem;display:flex;align-items:center;gap:10px}
|
|
.process-flow{display:flex;flex-wrap:wrap;gap:12px;align-items:center;justify-content:center;margin-bottom:20px}
|
|
.process-step{background:#1a1a2e;border:2px solid #333;border-radius:12px;padding:18px;min-width:140px;text-align:center;transition:all 0.3s}
|
|
.process-step:hover{border-color:#f59e0b;transform:translateY(-3px)}
|
|
.process-step .icon{font-size:2rem;margin-bottom:10px}
|
|
.process-step .num{width:28px;height:28px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-size:0.85rem;font-weight:bold;margin-bottom:8px}
|
|
.process-step .title{font-weight:bold;font-size:0.9rem;margin-bottom:5px}
|
|
.process-step .desc{font-size:0.7rem;opacity:0.8;line-height:1.4}
|
|
.process-arrow{color:#f59e0b;font-size:1.5rem;opacity:0.6}
|
|
|
|
/* Info Grid */
|
|
.info-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:15px;margin-top:20px;font-size:0.85rem}
|
|
@media(max-width:900px){.info-grid{grid-template-columns:1fr}}
|
|
.info-card{background:#1a1a2e;padding:15px;border-radius:10px;border-left:4px solid #f59e0b}
|
|
.info-card h5{color:#f59e0b;margin-bottom:10px;display:flex;align-items:center;gap:8px}
|
|
|
|
/* Extracteur Section */
|
|
.extractor-box{background:linear-gradient(135deg,#1a1025,#251530);border:1px solid #9333ea;border-radius:12px;padding:20px;margin-top:20px}
|
|
.extractor-box h5{color:#a78bfa;margin-bottom:15px;display:flex;align-items:center;gap:10px}
|
|
.extractor-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:15px;margin-bottom:15px}
|
|
@media(max-width:1000px){.extractor-grid{grid-template-columns:repeat(2,1fr)}}
|
|
.extractor-step{background:#1a1a2e;padding:15px;border-radius:8px;text-align:center;border-top:3px solid #f59e0b}
|
|
.extractor-step:nth-child(2){border-color:#3b82f6}
|
|
.extractor-step:nth-child(3){border-color:#10b981}
|
|
.extractor-step:nth-child(4){border-color:#9333ea}
|
|
|
|
/* Summary - CLIQUABLE */
|
|
.summary{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:15px;margin-bottom:25px}
|
|
.summary-card{background:#12121a;padding:20px;border-radius:12px;text-align:center;border-left:4px solid #f59e0b;cursor:pointer;transition:all 0.3s}
|
|
.summary-card:hover{transform:translateY(-3px);box-shadow:0 8px 25px rgba(245,158,11,0.2)}
|
|
.summary-card:nth-child(2){border-color:#10b981}
|
|
.summary-card:nth-child(2):hover{box-shadow:0 8px 25px rgba(16,185,129,0.2)}
|
|
.summary-card:nth-child(3){border-color:#3b82f6}
|
|
.summary-card:nth-child(3):hover{box-shadow:0 8px 25px rgba(59,130,246,0.2)}
|
|
.summary-card:nth-child(4){border-color:#9333ea}
|
|
.summary-card:nth-child(4):hover{box-shadow:0 8px 25px rgba(147,51,234,0.2)}
|
|
.summary-card:nth-child(5){border-color:#06b6d4}
|
|
.summary-card:nth-child(5):hover{box-shadow:0 8px 25px rgba(6,182,212,0.2)}
|
|
.summary-val{font-size:2rem;font-weight:bold;color:#f59e0b}
|
|
.summary-card:nth-child(2) .summary-val{color:#10b981}
|
|
.summary-card:nth-child(3) .summary-val{color:#3b82f6}
|
|
.summary-card:nth-child(4) .summary-val{color:#9333ea}
|
|
.summary-card:nth-child(5) .summary-val{color:#06b6d4}
|
|
.summary-lbl{font-size:0.8rem;opacity:0.7}
|
|
.summary-card .click-hint{font-size:0.65rem;opacity:0.4;margin-top:5px}
|
|
|
|
/* Tabs */
|
|
.tabs{display:flex;gap:10px;margin-bottom:20px;flex-wrap:wrap}
|
|
.tab{padding:12px 20px;background:#1a1a2e;border:1px solid #333;border-radius:8px;cursor:pointer;color:#888;transition:all 0.2s;display:flex;align-items:center;gap:8px}
|
|
.tab:hover{border-color:#f59e0b;color:#f59e0b}
|
|
.tab.active{background:#f59e0b;color:#000;border-color:#f59e0b;font-weight:600}
|
|
.tab-content{display:none}
|
|
.tab-content.active{display:block}
|
|
|
|
/* Table */
|
|
.table-container{background:#12121a;border-radius:12px;overflow-x:auto;border:1px solid #333}
|
|
table{width:100%;border-collapse:collapse;font-size:0.8rem}
|
|
th{background:#1a1a2e;padding:12px 10px;text-align:left;color:#f59e0b;font-weight:600;border-bottom:2px solid #333;white-space:nowrap}
|
|
td{padding:10px;border-bottom:1px solid #1e293b;vertical-align:top}
|
|
tr:hover{background:#1a1a2e50}
|
|
tr.expandable{cursor:pointer}
|
|
tr.expandable:hover{background:#f59e0b10}
|
|
.status{padding:4px 10px;border-radius:6px;font-size:0.7rem;font-weight:bold}
|
|
.status-winner{background:#10b98130;color:#10b981}
|
|
.status-learning{background:#f59e0b30;color:#f59e0b}
|
|
.status-active{background:#3b82f630;color:#3b82f6}
|
|
.status-inbox{background:#10b98130;color:#10b981}
|
|
.status-spam{background:#ef444430;color:#ef4444}
|
|
|
|
.pattern{background:#0d0d15;padding:5px 8px;border-radius:6px;font-family:monospace;font-size:0.7rem;max-width:120px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block}
|
|
.pattern:hover{white-space:normal;max-width:none;position:relative;z-index:10}
|
|
|
|
/* Detail Row (Drill-down) */
|
|
.detail-row{display:none;background:#0d0d15}
|
|
.detail-row.expanded{display:table-row}
|
|
.detail-row td{padding:20px;border-bottom:2px solid #f59e0b30}
|
|
.detail-content{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}
|
|
@media(max-width:1000px){.detail-content{grid-template-columns:1fr}}
|
|
.detail-section{background:#1a1a2e;padding:15px;border-radius:10px}
|
|
.detail-section h6{color:#f59e0b;margin-bottom:12px;font-size:0.85rem;display:flex;align-items:center;gap:8px}
|
|
.detail-section .item{display:flex;justify-content:space-between;padding:6px 0;border-bottom:1px solid #333;font-size:0.75rem}
|
|
.detail-section .item:last-child{border:none}
|
|
.detail-section .label{color:#888}
|
|
.detail-section .value{color:#5eead4;font-family:monospace;max-width:200px;overflow:hidden;text-overflow:ellipsis}
|
|
|
|
/* Buttons */
|
|
.btn{padding:10px 18px;border:none;border-radius:8px;cursor:pointer;font-size:0.85rem;display:inline-flex;align-items:center;gap:6px;transition:all 0.2s}
|
|
.btn-primary{background:#f59e0b;color:#000}
|
|
.btn-primary:hover{background:#d97706}
|
|
.btn-success{background:#10b981;color:#fff}
|
|
.btn-danger{background:#ef4444;color:#fff}
|
|
.btn-sm{padding:6px 10px;font-size:0.7rem}
|
|
|
|
/* Form */
|
|
.form-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:15px}
|
|
.form-grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:15px}
|
|
@media(max-width:900px){.form-grid,.form-grid-3{grid-template-columns:1fr}}
|
|
.form-group{margin-bottom:15px}
|
|
.form-group label{display:block;margin-bottom:6px;color:#94a3b8;font-size:0.85rem}
|
|
.form-group input,.form-group select,.form-group textarea{width:100%;padding:10px 12px;background:#1a1a2e;border:1px solid #333;border-radius:8px;color:#e2e8f0;font-size:0.9rem}
|
|
.form-group input:focus,.form-group select:focus,.form-group textarea:focus{border-color:#f59e0b;outline:none}
|
|
.form-group textarea{min-height:80px;font-family:monospace;font-size:0.8rem}
|
|
.form-group small{color:#666;font-size:0.7rem;display:block;margin-top:4px}
|
|
.form-section{background:#0d0d15;padding:15px;border-radius:10px;margin-bottom:20px;border:1px solid #333}
|
|
.form-section h5{color:#5eead4;margin-bottom:15px;font-size:0.9rem}
|
|
|
|
.message{padding:12px 20px;border-radius:8px;margin-bottom:20px;background:#10b98120;border:1px solid #10b981;color:#10b981}
|
|
|
|
.actions{display:flex;gap:6px}
|
|
.action-btn{padding:5px 8px;border:none;border-radius:6px;cursor:pointer;font-size:0.75rem}
|
|
.action-edit{background:#3b82f630;color:#3b82f6}
|
|
.action-delete{background:#ef444430;color:#ef4444}
|
|
.action-expand{background:#f59e0b30;color:#f59e0b}
|
|
|
|
.expand-icon{transition:transform 0.3s}
|
|
.expanded .expand-icon{transform:rotate(180deg)}
|
|
</style>
|
|
|
|
</head>
|
|
<body>
|
|
|
|
<a href="/system-flows.php" class="back-link"><i class="fas fa-arrow-left"></i> Retour aux System Flows</a>
|
|
|
|
<!-- PROCESS BOX -->
|
|
<div class="process-box">
|
|
<h3 class="process-title"><i class="fas fa-brain"></i> Comment fonctionne le Brain Engine ?</h3>
|
|
|
|
<div class="process-flow">
|
|
<div class="process-step">
|
|
<div class="icon">⚙️</div>
|
|
<div class="num" style="background:#3b82f6;color:white">1</div>
|
|
<div class="title" style="color:#3b82f6">CONFIG</div>
|
|
<div class="desc">Créer config<br>(from, subject, headers)</div>
|
|
</div>
|
|
<div class="process-arrow">→</div>
|
|
<div class="process-step">
|
|
<div class="icon">📤</div>
|
|
<div class="num" style="background:#f59e0b;color:black">2</div>
|
|
<div class="title" style="color:#f59e0b">SEND</div>
|
|
<div class="desc">Envoyer aux seeds<br>(boîtes de test)</div>
|
|
</div>
|
|
<div class="process-arrow">→</div>
|
|
<div class="process-step">
|
|
<div class="icon">📬</div>
|
|
<div class="num" style="background:#06b6d4;color:white">3</div>
|
|
<div class="title" style="color:#06b6d4">CHECK</div>
|
|
<div class="desc">Vérifier IMAP<br>Inbox ou Spam ?</div>
|
|
</div>
|
|
<div class="process-arrow">→</div>
|
|
<div class="process-step">
|
|
<div class="icon">📊</div>
|
|
<div class="num" style="background:#9333ea;color:white">4</div>
|
|
<div class="title" style="color:#9333ea">SCORE</div>
|
|
<div class="desc">Calculer inbox rate<br>par ISP</div>
|
|
</div>
|
|
<div class="process-arrow">→</div>
|
|
<div class="process-step" style="border-color:#10b981">
|
|
<div class="icon">🏆</div>
|
|
<div class="num" style="background:#10b981;color:white">5</div>
|
|
<div class="title" style="color:#10b981">WINNER</div>
|
|
<div class="desc">Config gagnante<br>→ Production</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="info-grid">
|
|
<div class="info-card">
|
|
<h5><i class="fas fa-bullseye"></i> Objectif</h5>
|
|
<p style="font-size:0.8rem;opacity:0.8">Trouver les configs qui atteignent l'INBOX sur chaque ISP</p>
|
|
</div>
|
|
<div class="info-card">
|
|
<h5><i class="fas fa-cogs"></i> Process</h5>
|
|
<p style="font-size:0.8rem;opacity:0.8">Le Brain teste automatiquement et apprend ce qui marche</p>
|
|
</div>
|
|
<div class="info-card">
|
|
<h5><i class="fas fa-chart-line"></i> Résultat</h5>
|
|
<p style="font-size:0.8rem;opacity:0.8">Inbox rate 88-100% avec les configs gagnantes</p>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- EXTRACTEUR DE NEWSLETTERS -->
|
|
<div class="extractor-box">
|
|
<h5><i class="fas fa-mail-bulk"></i> 📰 Extracteur de Newsletters WEVAL - Comment il alimente le Brain</h5>
|
|
|
|
<div class="extractor-grid">
|
|
<div class="extractor-step">
|
|
<div style="font-size:1.5rem;margin-bottom:5px">📥</div>
|
|
<div style="font-weight:bold;color:#f59e0b;font-size:0.8rem">1. COLLECT</div>
|
|
<div style="font-size:0.7rem;opacity:0.8;margin-top:5px">Seeds inscrits sur newsletters (Amazon, Netflix...)</div>
|
|
</div>
|
|
<div class="extractor-step">
|
|
<div style="font-size:1.5rem;margin-bottom:5px">📬</div>
|
|
<div style="font-weight:bold;color:#3b82f6;font-size:0.8rem">2. SCAN IMAP</div>
|
|
<div style="font-size:0.7rem;opacity:0.8;margin-top:5px">Connexion aux seeds, scan INBOX pour newsletters</div>
|
|
</div>
|
|
<div class="extractor-step">
|
|
<div style="font-size:1.5rem;margin-bottom:5px">🔍</div>
|
|
<div style="font-weight:bold;color:#10b981;font-size:0.8rem">3. EXTRACT</div>
|
|
<div style="font-size:0.7rem;opacity:0.8;margin-top:5px">From, Subject, Headers, Body structure</div>
|
|
</div>
|
|
<div class="extractor-step">
|
|
<div style="font-size:1.5rem;margin-bottom:5px">🧠</div>
|
|
<div style="font-weight:bold;color:#9333ea;font-size:0.8rem">4. LEARN</div>
|
|
<div style="font-size:0.7rem;opacity:0.8;margin-top:5px">Brain analyse les patterns qui atteignent INBOX</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div style="background:#0d0d15;border-radius:8px;padding:15px;font-size:0.8rem">
|
|
<p><strong style="color:#5eead4">💡 Pourquoi ?</strong> Les newsletters arrivent en INBOX = Leurs patterns fonctionnent. Le Brain copie ces patterns gagnants pour nos emails.</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<h1><i class="fas fa-brain"></i> Brain Manager</h1>
|
|
<p style="opacity:0.7;margin-bottom:20px">Configurations, Tests & Winners pour maximiser l'inbox rate</p>
|
|
|
|
<?php if ($message): ?>
|
|
<div class="message"><?=$message?></div>
|
|
<?php endif; ?>
|
|
|
|
<!-- STATS CLIQUABLES -->
|
|
<div class="summary">
|
|
<div class="summary-card" onclick="switchTab('configs')" title="Voir les configurations">
|
|
<div class="summary-val"><?=$stats['configs']?></div>
|
|
<div class="summary-lbl">Configurations</div>
|
|
<div class="click-hint"><i class="fas fa-mouse-pointer"></i> Cliquer pour voir</div>
|
|
</div>
|
|
<div class="summary-card" onclick="switchTab('winners')" title="Voir les winners">
|
|
<div class="summary-val"><?=$stats['winners']?></div>
|
|
<div class="summary-lbl">Winners</div>
|
|
<div class="click-hint"><i class="fas fa-mouse-pointer"></i> Cliquer pour voir</div>
|
|
</div>
|
|
<div class="summary-card" onclick="switchTab('tests')" title="Voir les tests">
|
|
<div class="summary-val"><?=$stats['tests']?></div>
|
|
<div class="summary-lbl">Tests</div>
|
|
<div class="click-hint"><i class="fas fa-mouse-pointer"></i> Cliquer pour voir</div>
|
|
</div>
|
|
<div class="summary-card" onclick="switchTab('configs')" title="Moyenne inbox rate">
|
|
<div class="summary-val"><?=$stats['inbox_rate']?></div>
|
|
<div class="summary-lbl">Inbox Rate %</div>
|
|
<div class="click-hint"><i class="fas fa-chart-line"></i> Moyenne</div>
|
|
</div>
|
|
<div class="summary-card" onclick="window.location='/harvest-manager.php'" title="Voir les seeds">
|
|
<div class="summary-val"><?=number_format($stats['seeds'])?></div>
|
|
<div class="summary-lbl">Seeds</div>
|
|
<div class="click-hint"><i class="fas fa-external-link-alt"></i> Harvest Manager</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- TABS -->
|
|
<div class="tabs">
|
|
<div class="tab active" data-tab="configs"><i class="fas fa-cog"></i> Configurations</div>
|
|
<div class="tab" data-tab="tests" onclick="switchTab('tests')"><i class="fas fa-flask"></i> Tests</div>
|
|
<div class="tab" data-tab="winners"><i class="fas fa-trophy"></i> Winners</div>
|
|
<div class="tab" data-tab="isp"><i class="fas fa-server"></i> ISP Profiles</div>
|
|
<div class="tab" data-tab="newconfig"><i class="fas fa-plus"></i> Nouvelle Config</div>
|
|
</div>
|
|
|
|
<!-- TAB: CONFIGURATIONS avec DRILL-DOWN -->
|
|
<div id="tab-configs" class="tab-content active">
|
|
<div style="display:flex;gap:10px;margin-bottom:15px">
|
|
<button class="btn btn-primary" onclick="switchTab('newconfig')"><i class="fas fa-plus"></i> Nouvelle Config</button>
|
|
<button class="btn btn-success" onclick="location.reload()"><i class="fas fa-sync"></i> Rafraîchir</button>
|
|
</div>
|
|
|
|
<div class="table-container">
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th style="width:30px"></th>
|
|
<th>ID</th>
|
|
<th>ISP Target</th>
|
|
<th>Méthode</th>
|
|
<th>From Name</th>
|
|
<th>From Email</th>
|
|
<th>Subject</th>
|
|
<th>Return-Path</th>
|
|
<th>Inbox %</th>
|
|
<th>Status</th>
|
|
<th>Actions</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<?php if (empty($configs)): ?>
|
|
<tr><td colspan="11" style="text-align:center;opacity:0.5;padding:30px">Aucune configuration</td></tr>
|
|
<?php else: ?>
|
|
<?php foreach ($configs as $c): ?>
|
|
<tr class="expandable" onclick="toggleDetail(<?=$c['id']?>)">
|
|
<td><i class="fas fa-chevron-down expand-icon" id="icon-<?=$c['id']?>"></i></td>
|
|
<td><?=$c['id']?></td>
|
|
<td><strong style="color:#06b6d4"><?=htmlspecialchars($c['isp_target'] ?? '-')?></strong></td>
|
|
<td><span class="status status-active"><?=htmlspecialchars($c['send_method'] ?? '-')?></span></td>
|
|
<td><span class="pattern"><?=htmlspecialchars($c['from_name'] ?? '-')?></span></td>
|
|
<td><span class="pattern"><?=htmlspecialchars($c['from_email'] ?? '-')?></span></td>
|
|
<td><span class="pattern"><?=htmlspecialchars($c['subject_template'] ?? '-')?></span></td>
|
|
<td><span class="pattern"><?=htmlspecialchars($c['return_path'] ?? '-')?></span></td>
|
|
<td>
|
|
<?php if ($c['inbox_rate'] > 0): ?>
|
|
<span class="status <?=$c['inbox_rate'] >= 70 ? 'status-inbox' : 'status-spam'?>"><?=$c['inbox_rate']?>%</span>
|
|
<?php else: ?>-<?php endif; ?>
|
|
</td>
|
|
<td>
|
|
<?php if ($c['is_winner']): ?>
|
|
<span class="status status-winner">🏆 Winner</span>
|
|
<?php elseif ($c['is_active']): ?>
|
|
<span class="status status-learning"><?=htmlspecialchars($c['status'] ?? 'learning')?></span>
|
|
<?php else: ?>
|
|
<span class="status" style="background:#33333380;color:#666">Inactif</span>
|
|
<?php endif; ?>
|
|
</td>
|
|
<td class="actions" onclick="event.stopPropagation()">
|
|
<button class="action-btn action-expand" onclick="toggleDetail(<?=$c['id']?>)" title="Détails"><i class="fas fa-eye"></i></button>
|
|
<form method="POST" style="display:inline" onsubmit="return confirm('Supprimer?')">
|
|
<input type="hidden" name="action" value="delete_config">
|
|
<input type="hidden" name="id" value="<?=$c['id']?>">
|
|
<button type="submit" class="action-btn action-delete" title="Supprimer"><i class="fas fa-trash"></i></button>
|
|
</form>
|
|
</td>
|
|
</tr>
|
|
<!-- DETAIL ROW (Drill-down) -->
|
|
<tr class="detail-row" id="detail-<?=$c['id']?>">
|
|
<td colspan="11">
|
|
<div class="detail-content" style="display:grid;grid-template-columns:repeat(4,1fr);gap:15px">
|
|
<?php $isp_info = $isp_indexed[strtoupper($c['isp_target'] ?? '')] ?? []; ?>
|
|
|
|
<!-- COL 1: Email Config -->
|
|
<div class="detail-section">
|
|
<h6><i class="fas fa-envelope"></i> Email Config</h6>
|
|
<div class="item"><span class="label">From Name</span><span class="value"><?=htmlspecialchars($c['from_name'] ?? '-')?></span></div>
|
|
<div class="item"><span class="label">From Email</span><span class="value"><?=htmlspecialchars($c['from_email'] ?? '-')?></span></div>
|
|
<div class="item"><span class="label">Reply-To</span><span class="value"><?=htmlspecialchars($c['reply_to'] ?? '-')?></span></div>
|
|
<div class="item"><span class="label">Return-Path</span><span class="value"><?=htmlspecialchars($c['return_path'] ?? '-')?></span></div>
|
|
<div class="item"><span class="label">Subject</span><span class="value"><?=htmlspecialchars($c['subject_template'] ?? '-')?></span></div>
|
|
<div class="item"><span class="label">Domain</span><span class="value" style="color:#f59e0b"><?=htmlspecialchars($c['domain_used'] ?? '-')?></span></div>
|
|
<div class="item"><span class="label">IP Used</span><span class="value"><?=htmlspecialchars($c['ip_used'] ?? '-')?></span></div>
|
|
</div>
|
|
|
|
<!-- COL 2: Headers & Format -->
|
|
<div class="detail-section">
|
|
<h6><i class="fas fa-code"></i> Headers & Format</h6>
|
|
<div class="item"><span class="label">Content-Type</span><span class="value"><?=htmlspecialchars($c['content_type'] ?? '-')?></span></div>
|
|
<div class="item"><span class="label">Encoding</span><span class="value"><?=htmlspecialchars($c['encoding'] ?? '-')?></span></div>
|
|
<div class="item"><span class="label">Charset</span><span class="value"><?=htmlspecialchars($c['charset'] ?? 'utf-8')?></span></div>
|
|
<div class="item"><span class="label">Header 1</span><span class="value"><?=htmlspecialchars(($c['header_1_name'] ?? '') . ': ' . ($c['header_1_value'] ?? '-'))?></span></div>
|
|
<div class="item"><span class="label">Header 2</span><span class="value"><?=htmlspecialchars(($c['header_2_name'] ?? '') . ': ' . ($c['header_2_value'] ?? '-'))?></span></div>
|
|
<div class="item"><span class="label">Header 3</span><span class="value"><?=htmlspecialchars(($c['header_3_name'] ?? '') . ': ' . ($c['header_3_value'] ?? '-'))?></span></div>
|
|
<div class="item"><span class="label">Header 4</span><span class="value"><?=htmlspecialchars(($c['header_4_name'] ?? '') . ': ' . ($c['header_4_value'] ?? '-'))?></span></div>
|
|
<div class="item"><span class="label">Header 5</span><span class="value"><?=htmlspecialchars(($c['header_5_name'] ?? '') . ': ' . ($c['header_5_value'] ?? '-'))?></span></div>
|
|
</div>
|
|
|
|
<!-- COL 3: Links & Tracking -->
|
|
<div class="detail-section" style="border-left:3px solid #a78bfa">
|
|
<h6><i class="fas fa-link" style="color:#a78bfa"></i> Links & Tracking</h6>
|
|
<div class="item"><span class="label">Link URL</span><span class="value" style="color:#3b82f6"><?=htmlspecialchars($c['link_url'] ?? '-')?></span></div>
|
|
<div class="item"><span class="label">Image URL</span><span class="value"><?=htmlspecialchars($c['image_url'] ?? '-')?></span></div>
|
|
<div class="item"><span class="label">Redirect Domain</span><span class="value" style="color:#f59e0b"><?=htmlspecialchars($c['redirect_domain'] ?? '-')?></span></div>
|
|
<div class="item"><span class="label">Tracking Domain</span><span class="value"><?=htmlspecialchars($c['tracking_domain'] ?? '-')?></span></div>
|
|
<div class="item"><span class="label">Unsubscribe URL</span><span class="value"><?=htmlspecialchars($c['unsubscribe_url'] ?? '-')?></span></div>
|
|
<div class="item"><span class="label">List-Unsubscribe</span><span class="value"><?=htmlspecialchars($c['list_unsubscribe'] ?? '-')?></span></div>
|
|
</div>
|
|
|
|
<!-- COL 4: DNS & Authentication -->
|
|
<div class="detail-section" style="border-left:3px solid #10b981">
|
|
<h6><i class="fas fa-shield-alt" style="color:#10b981"></i> DNS & Auth</h6>
|
|
<div class="item"><span class="label">SPF Record</span><span class="value"><?=htmlspecialchars($c['spf_record'] ?? '-')?></span></div>
|
|
<div class="item"><span class="label">DKIM Selector</span><span class="value"><?=htmlspecialchars($c['dkim_selector'] ?? '-')?></span></div>
|
|
<div class="item"><span class="label">DMARC Policy</span><span class="value"><?=htmlspecialchars($c['dmarc_policy'] ?? '-')?></span></div>
|
|
<div class="item"><span class="label">SMTP Type</span><span class="value"><?=htmlspecialchars($c['smtp_type'] ?? '-')?></span></div>
|
|
<div class="item"><span class="label">SMTP Account</span><span class="value"><?=$c['smtp_account_id'] ?? '-'?></span></div>
|
|
<div class="item"><span class="label">Config Hash</span><span class="value" style="font-size:0.6rem"><?=substr($c['config_hash'] ?? '-', 0, 16)?>...</span></div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- ROW 2: Stats + ISP Config -->
|
|
<div style="display:grid;grid-template-columns:1fr 1fr;gap:15px;margin-top:15px">
|
|
<!-- Stats & Delivery -->
|
|
<div class="detail-section" style="border-left:3px solid #ef4444">
|
|
<h6><i class="fas fa-chart-bar" style="color:#ef4444"></i> Stats & Delivery</h6>
|
|
<div style="display:grid;grid-template-columns:repeat(3,1fr);gap:10px">
|
|
<div class="item"><span class="label">Total Sent</span><span class="value"><?=$c['total_sent'] ?? 0?></span></div>
|
|
<div class="item"><span class="label">Inbox</span><span class="value" style="color:#10b981"><?=$c['inbox_count'] ?? 0?></span></div>
|
|
<div class="item"><span class="label">Spam</span><span class="value" style="color:#ef4444"><?=$c['spam_count'] ?? 0?></span></div>
|
|
<div class="item"><span class="label">Bounce</span><span class="value"><?=$c['bounce_count'] ?? 0?></span></div>
|
|
<div class="item"><span class="label">Inbox Rate</span><span class="value" style="color:#10b981;font-weight:bold;font-size:1.1rem"><?=$c['inbox_rate'] ?? 0?>%</span></div>
|
|
<div class="item"><span class="label">Confidence</span><span class="value"><?=$c['confidence_score'] ?? 0?>%</span></div>
|
|
<div class="item"><span class="label">Stability</span><span class="value"><?=$c['stability_score'] ?? 0?>%</span></div>
|
|
<div class="item"><span class="label">Consec. Inbox</span><span class="value"><?=$c['consecutive_inbox'] ?? 0?></span></div>
|
|
<div class="item"><span class="label">Consec. Spam</span><span class="value"><?=$c['consecutive_spam'] ?? 0?></span></div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- ISP Config -->
|
|
<div class="detail-section" style="border-left:3px solid #06b6d4">
|
|
<h6><i class="fas fa-server" style="color:#06b6d4"></i> ISP Config (<?=htmlspecialchars($c['isp_target'] ?? '-')?>)</h6>
|
|
<?php if (!empty($isp_info)): ?>
|
|
<div style="display:grid;grid-template-columns:repeat(2,1fr);gap:10px">
|
|
<div class="item"><span class="label">Filter Type</span><span class="value"><?=htmlspecialchars($isp_info['filter_type'] ?? '-')?></span></div>
|
|
<div class="item"><span class="label">Volume/jour</span><span class="value"><?=$isp_info['recommended_volume'] ?? '-'?></span></div>
|
|
<div class="item"><span class="label">Delay (sec)</span><span class="value"><?=$isp_info['recommended_delay'] ?? '-'?>s</span></div>
|
|
<div class="item"><span class="label">Best Time</span><span class="value"><?=htmlspecialchars($isp_info['best_send_time'] ?? '-')?></span></div>
|
|
<div class="item"><span class="label">Avg Inbox %</span><span class="value" style="color:#10b981"><?=$isp_info['inbox_rate_avg'] ?? '-'?>%</span></div>
|
|
<div class="item"><span class="label">Notes</span><span class="value" style="font-size:0.65rem"><?=htmlspecialchars(substr($isp_info['notes'] ?? '-', 0, 40))?></span></div>
|
|
</div>
|
|
<?php else: ?>
|
|
<div style="opacity:0.5;font-size:0.75rem;padding:10px">Pas de profil ISP pour <?=htmlspecialchars($c['isp_target'] ?? '-')?></div>
|
|
<?php endif; ?>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- ROW 3: Placeholders -->
|
|
<div style="margin-top:15px;background:#0d0d15;padding:15px;border-radius:8px;border:1px solid #333">
|
|
<h6 style="color:#a78bfa;margin-bottom:12px;font-size:0.85rem"><i class="fas fa-code" style="margin-right:8px"></i> Placeholders Disponibles</h6>
|
|
<div style="display:grid;grid-template-columns:repeat(6,1fr);gap:8px;font-size:0.65rem">
|
|
<div><code style="color:#5eead4">{name}</code> <span style="opacity:0.5">Nom</span></div>
|
|
<div><code style="color:#5eead4">{firstname}</code> <span style="opacity:0.5">Prénom</span></div>
|
|
<div><code style="color:#5eead4">{lastname}</code> <span style="opacity:0.5">Nom</span></div>
|
|
<div><code style="color:#5eead4">{email}</code> <span style="opacity:0.5">Email</span></div>
|
|
<div><code style="color:#5eead4">{domain}</code> <span style="opacity:0.5">Domaine</span></div>
|
|
<div><code style="color:#5eead4">{company}</code> <span style="opacity:0.5">Entreprise</span></div>
|
|
<div><code style="color:#5eead4">{date}</code> <span style="opacity:0.5">Date</span></div>
|
|
<div><code style="color:#5eead4">{id}</code> <span style="opacity:0.5">ID unique</span></div>
|
|
<div><code style="color:#5eead4">{random}</code> <span style="opacity:0.5">Aléatoire</span></div>
|
|
<div><code style="color:#5eead4">{unsubscribe}</code> <span style="opacity:0.5">Désinscrire</span></div>
|
|
<div><code style="color:#5eead4">{tracking}</code> <span style="opacity:0.5">Pixel</span></div>
|
|
<div><code style="color:#5eead4">{offer_link}</code> <span style="opacity:0.5">Lien offre</span></div>
|
|
</div>
|
|
<div style="margin-top:8px;padding-top:8px;border-top:1px solid #333;font-size:0.65rem">
|
|
<span style="opacity:0.5">Spintax:</span> <code style="color:#f59e0b">{spin:opt1|opt2|opt3}</code>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- ROW 4: Body Template -->
|
|
<?php if (!empty($c['body_template'])): ?>
|
|
<div style="margin-top:15px;background:#0d0d15;padding:15px;border-radius:8px;border:1px solid #f59e0b30">
|
|
<h6 style="color:#f59e0b;margin-bottom:12px;font-size:0.85rem;display:flex;justify-content:space-between;align-items:center">
|
|
<span><i class="fas fa-file-code" style="margin-right:8px"></i> Body Template (HTML)</span>
|
|
<span style="font-size:0.7rem;opacity:0.6"><?=strlen($c['body_template'])?> caractères</span>
|
|
</h6>
|
|
<div style="background:#1a1a2e;border-radius:6px;padding:12px;max-height:200px;overflow-y:auto">
|
|
<pre style="margin:0;font-size:0.7rem;color:#94a3b8;white-space:pre-wrap;word-break:break-all;font-family:monospace"><?=htmlspecialchars($c['body_template'])?></pre>
|
|
</div>
|
|
</div>
|
|
<?php else: ?>
|
|
<div style="margin-top:15px;background:#0d0d15;padding:15px;border-radius:8px;border:1px dashed #333">
|
|
<h6 style="color:#666;margin-bottom:0;font-size:0.85rem">
|
|
<i class="fas fa-file-code" style="margin-right:8px"></i> Body Template - <span style="font-style:italic">Non défini</span>
|
|
</h6>
|
|
</div>
|
|
<?php endif; ?>
|
|
</td>
|
|
</tr>
|
|
<?php endforeach; ?>
|
|
<?php endif; ?>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- TAB: TESTS -->
|
|
<div id="tab-tests" class="tab-content">
|
|
<div style="display:flex;gap:10px;margin-bottom:15px;flex-wrap:wrap">
|
|
<button class="btn btn-primary" onclick="runBrainTest(5)" id="btn-run-test"><i class="fas fa-play"></i> Lancer 5 Tests</button>
|
|
<button class="btn btn-success" onclick="runBrainTest(10)"><i class="fas fa-rocket"></i> Lancer 10 Tests</button>
|
|
<button class="btn" style="background:#9333ea;color:#fff" onclick="checkSeeds()"><i class="fas fa-search"></i> Vérifier IMAP</button>
|
|
<button class="btn" style="background:#333;color:#fff" onclick="location.reload()"><i class="fas fa-sync"></i> Rafraîchir</button>
|
|
<span id="test-status" style="margin-left:auto;padding:10px;font-size:0.85rem"></span>
|
|
</div>
|
|
<div class="table-container">
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>ID</th>
|
|
<th>Job ID</th>
|
|
<th>Config</th>
|
|
<th>Seed</th>
|
|
<th>Send Status</th>
|
|
<th>Check Status</th>
|
|
<th>Result</th>
|
|
<th>Subject</th>
|
|
<th>Date</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<?php if (empty($tests)): ?>
|
|
<tr><td colspan="9" style="text-align:center;opacity:0.5;padding:30px">Aucun test effectué - Lancez des tests pour voir les résultats ici</td></tr>
|
|
<?php else: ?>
|
|
<?php foreach ($tests as $t): ?>
|
|
<tr>
|
|
<td><?=$t['id']?></td>
|
|
<td><code style="font-size:0.7rem"><?=substr($t['job_id'] ?? '-', 0, 8)?></code></td>
|
|
<td><a href="#" onclick="switchTab('configs');return false;" style="color:#f59e0b">#<?=$t['config_id']?></a></td>
|
|
<td><?=$t['seed_id'] ?? '-'?></td>
|
|
<td><span class="status <?=($t['send_status'] ?? '') === 'sent' ? 'status-inbox' : 'status-learning'?>"><?=$t['send_status'] ?? '-'?></span></td>
|
|
<td><span class="status <?=($t['check_status'] ?? '') === 'checked' ? 'status-inbox' : 'status-learning'?>"><?=$t['check_status'] ?? '-'?></span></td>
|
|
<td><span class="status <?=($t['result'] ?? '') === 'inbox' ? 'status-inbox' : 'status-spam'?>"><?=$t['result'] ?? '-'?></span></td>
|
|
<td><span class="pattern"><?=htmlspecialchars(substr($t['subject_used'] ?? '-', 0, 30))?></span></td>
|
|
<td><?=substr($t['created_at'] ?? '-', 0, 16)?></td>
|
|
</tr>
|
|
<?php endforeach; ?>
|
|
<?php endif; ?>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- TAB: WINNERS -->
|
|
<div id="tab-winners" class="tab-content">
|
|
<div class="table-container">
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>ID</th>
|
|
<th>Config</th>
|
|
<th>ISP Target</th>
|
|
<th>Méthode</th>
|
|
<th>Domain</th>
|
|
<th>Inbox Rate</th>
|
|
<th>Total Tests</th>
|
|
<th>Stability</th>
|
|
<th>Daily Limit</th>
|
|
<th>Verified</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<?php if (empty($winners)): ?>
|
|
<tr><td colspan="10" style="text-align:center;opacity:0.5;padding:30px">Aucun winner</td></tr>
|
|
<?php else: ?>
|
|
<?php foreach ($winners as $w): ?>
|
|
<tr>
|
|
<td><?=$w['id']?></td>
|
|
<td><a href="#" onclick="switchTab('configs');return false;" style="color:#f59e0b">#<?=$w['config_id']?></a></td>
|
|
<td><strong style="color:#06b6d4"><?=htmlspecialchars($w['isp_target'] ?? '-')?></strong></td>
|
|
<td><span class="status status-active"><?=htmlspecialchars($w['send_method'] ?? '-')?></span></td>
|
|
<td><span class="pattern"><?=htmlspecialchars($w['domain_used'] ?? '-')?></span></td>
|
|
<td><span class="status status-inbox" style="font-size:1rem;font-weight:bold"><?=number_format($w['inbox_rate'] ?? 0, 2)?>%</span></td>
|
|
<td><?=$w['total_tests'] ?? '-'?></td>
|
|
<td><?=$w['stability_score'] ?? '-'?>%</td>
|
|
<td><?=$w['daily_limit'] ?? 1000?></td>
|
|
<td><?=substr($w['verified_at'] ?? '-', 0, 10)?></td>
|
|
</tr>
|
|
<?php endforeach; ?>
|
|
<?php endif; ?>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- TAB: ISP PROFILES -->
|
|
<div id="tab-isp" class="tab-content">
|
|
<div class="table-container">
|
|
<table>
|
|
<thead>
|
|
<tr><th>ISP</th><th>Code</th><th>Filter</th><th>Volume</th><th>Delay</th><th>Best Time</th><th>Avg Rate</th></tr>
|
|
</thead>
|
|
<tbody>
|
|
<?php if (empty($isp_profiles)): ?>
|
|
<tr><td colspan="7" style="text-align:center;opacity:0.5;padding:30px">Aucun profil ISP</td></tr>
|
|
<?php else: ?>
|
|
<?php foreach ($isp_profiles as $isp): ?>
|
|
<tr>
|
|
<td><strong><?=htmlspecialchars($isp['isp_name'])?></strong></td>
|
|
<td><code><?=htmlspecialchars($isp['isp_code'] ?? '-')?></code></td>
|
|
<td><?=htmlspecialchars($isp['filter_type'] ?? '-')?></td>
|
|
<td><?=$isp['recommended_volume'] ?? '-'?></td>
|
|
<td><?=$isp['recommended_delay'] ?? '-'?>s</td>
|
|
<td><?=$isp['best_send_time'] ?? '-'?></td>
|
|
<td><?=$isp['inbox_rate_avg'] ?? '-'?>%</td>
|
|
</tr>
|
|
<?php endforeach; ?>
|
|
<?php endif; ?>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- TAB: NOUVELLE CONFIG (Formulaire complet) -->
|
|
<div id="tab-newconfig" class="tab-content">
|
|
<div style="background:#12121a;padding:25px;border-radius:12px;border:1px solid #333;max-width:1000px">
|
|
<h3 style="color:#f59e0b;margin-bottom:20px"><i class="fas fa-plus-circle"></i> Créer une nouvelle configuration</h3>
|
|
|
|
<form method="POST">
|
|
<input type="hidden" name="action" value="create_config">
|
|
|
|
<!-- Section 1: Base -->
|
|
<div class="form-section">
|
|
<h5><i class="fas fa-bullseye"></i> Cible & Méthode</h5>
|
|
<div class="form-grid">
|
|
<div class="form-group">
|
|
<label>ISP Cible *</label>
|
|
<select name="isp_target" required>
|
|
<option value="GMAIL">Gmail</option>
|
|
<option value="HOTMAIL">Hotmail/Outlook</option>
|
|
<option value="YAHOO">Yahoo</option>
|
|
<option value="ORANGE">Orange</option>
|
|
<option value="SFR">SFR</option>
|
|
<option value="FREE">Free</option>
|
|
<option value="LAPOSTE">La Poste</option>
|
|
<option value="GMX">GMX</option>
|
|
<option value="T-ONLINE">T-Online</option>
|
|
<option value="WEB.DE">Web.de</option>
|
|
<option value="VIDEOTRON">Videotron</option>
|
|
<option value="AOL">AOL</option>
|
|
</select>
|
|
</div>
|
|
<div class="form-group">
|
|
<label>Méthode d'envoi *</label>
|
|
<select name="send_method" required>
|
|
<option value="OFFICE_365">Office 365</option>
|
|
<option value="GSUITE">GSuite / Gmail</option>
|
|
<option value="PMTA">PMTA (PowerMTA)</option>
|
|
<option value="DOMAIN_IP">Domain + IP</option>
|
|
<option value="SMTP">SMTP Generic</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Section 2: From / Reply -->
|
|
<div class="form-section">
|
|
<h5><i class="fas fa-envelope"></i> Expéditeur</h5>
|
|
<div class="form-grid">
|
|
<div class="form-group">
|
|
<label>From Name</label>
|
|
<input type="text" name="from_name" placeholder='"Service Client" ou "[Name]"'>
|
|
<small>Variables: [Name], [Company], "Texte fixe"</small>
|
|
</div>
|
|
<div class="form-group">
|
|
<label>From Email</label>
|
|
<input type="text" name="from_email" placeholder="info@[domain] ou contact@[domain]">
|
|
<small>Variables: [domain], [name]</small>
|
|
</div>
|
|
</div>
|
|
<div class="form-grid">
|
|
<div class="form-group">
|
|
<label>Reply-To</label>
|
|
<input type="text" name="reply_to" placeholder="reply@[domain]">
|
|
</div>
|
|
<div class="form-group">
|
|
<label>Return-Path</label>
|
|
<input type="text" name="return_path" placeholder="bounce@[domain]">
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<label>Domain Used</label>
|
|
<input type="text" name="domain_used" placeholder="example.com ou *.onmicrosoft.com">
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Section 3: Content -->
|
|
<div class="form-section">
|
|
<h5><i class="fas fa-file-alt"></i> Contenu</h5>
|
|
<div class="form-group">
|
|
<label>Subject Template</label>
|
|
<input type="text" name="subject_template" placeholder="Votre commande #[ID] ou Ihre Bestellung">
|
|
<small>Variables: [ID], [Name], [Date]</small>
|
|
</div>
|
|
<div class="form-grid">
|
|
<div class="form-group">
|
|
<label>Content-Type</label>
|
|
<select name="content_type">
|
|
<option value="text/html; charset=utf-8">text/html; charset=utf-8</option>
|
|
<option value="multipart/alternative">multipart/alternative</option>
|
|
<option value="text/plain">text/plain</option>
|
|
</select>
|
|
</div>
|
|
<div class="form-group">
|
|
<label>Encoding</label>
|
|
<select name="encoding">
|
|
<option value="quoted-printable">quoted-printable</option>
|
|
<option value="base64">base64</option>
|
|
<option value="8bit">8bit</option>
|
|
<option value="7bit">7bit</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<div class="form-group">
|
|
<label>Body Template (HTML)</label>
|
|
<textarea name="body_template" placeholder="<html><body>Hello [Name]...
|
|
</body></html>
|