59 lines
3.0 KiB
PHP
Executable File
59 lines
3.0 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* BRAIN SMART TEST - Teste les configs avec les VRAIS seeds par ISP
|
|
*/
|
|
$pdo = new PDO("pgsql:host=localhost;dbname=adx_system", "admin", "admin123");
|
|
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
|
|
|
$ispMapping = [
|
|
'T-ONLINE' => ['T-ONLINE', 'TONLINE'], 'GMX' => ['GMX'], 'GMAIL' => ['GMAIL', 'GOOGLE'],
|
|
'OUTLOOK' => ['HOTMAIL', 'MICROSOFT', 'OUTLOOK'], 'HOTMAIL' => ['HOTMAIL', 'MICROSOFT'],
|
|
'ZIGGO' => ['ZIGGO'], 'ALICE' => ['ALICE', 'LIBERO'], 'VIDEOTRON' => ['VIDEOTRON'],
|
|
'SFR' => ['SFR'], 'ORANGE' => ['ORANGE'], 'YAHOO' => ['YAHOO'], 'FREENET' => ['FREENET']
|
|
];
|
|
|
|
$configId = $argv[1] ?? null;
|
|
if ($configId) {
|
|
$config = $pdo->query("SELECT * FROM admin.brain_configs WHERE id = $configId")->fetch(PDO::FETCH_ASSOC);
|
|
} else {
|
|
$config = $pdo->query("SELECT c.* FROM admin.brain_configs c JOIN admin.brain_winners w ON w.config_id = c.id WHERE w.is_active = true ORDER BY RANDOM() LIMIT 1")->fetch(PDO::FETCH_ASSOC);
|
|
}
|
|
if (!$config) die("❌ Aucune config\n");
|
|
|
|
$ispTarget = strtoupper($config['isp_target']);
|
|
echo "🧪 CONFIG #{$config['id']}: {$config['isp_target']} - {$config['send_method']}\n";
|
|
|
|
$seedIsps = $ispMapping[$ispTarget] ?? [$ispTarget];
|
|
$seedIspList = "'" . implode("','", $seedIsps) . "'";
|
|
$seed = $pdo->query("SELECT * FROM admin.brain_seeds WHERE UPPER(isp) IN ($seedIspList) AND password IS NOT NULL AND password != '' ORDER BY RANDOM() LIMIT 1")->fetch(PDO::FETCH_ASSOC);
|
|
if (!$seed) $seed = $pdo->query("SELECT * FROM admin.brain_seeds WHERE password IS NOT NULL ORDER BY RANDOM() LIMIT 1")->fetch(PDO::FETCH_ASSOC);
|
|
if (!$seed) die("❌ Aucun seed\n");
|
|
|
|
echo "📧 Seed: {$seed['email']} ({$seed['isp']})\n";
|
|
|
|
$domain = $config['domain_used'] ?: 'wevads.com';
|
|
$fromEmail = str_replace('[domain]', $domain, $config['from_email'] ?: "test@$domain");
|
|
$fromName = str_replace('[domain]', $domain, $config['from_name'] ?: 'Test');
|
|
$subject = 'Brain Test #' . rand(1000,9999) . ' - ' . date('H:i');
|
|
$returnPath = str_replace('[domain]', $domain, $config['return_path'] ?: "bounce@$domain");
|
|
|
|
$body = "<html><body><p>Test Config #{$config['id']} - {$config['isp_target']} - " . date('Y-m-d H:i:s') . "</p></body></html>";
|
|
|
|
$socket = @fsockopen('127.0.0.1', 25, $errno, $errstr, 10);
|
|
if (!$socket) die("❌ PMTA fail\n");
|
|
|
|
fgets($socket);
|
|
foreach(["EHLO $domain\r\n", "MAIL FROM:<$returnPath>\r\n", "RCPT TO:<{$seed['email']}>\r\n", "DATA\r\n"] as $cmd) { fwrite($socket, $cmd); fgets($socket); }
|
|
|
|
$msg = "From: $fromName <$fromEmail>\r\nTo: {$seed['email']}\r\nSubject: $subject\r\nContent-Type: text/html\r\n\r\n$body\r\n.\r\n";
|
|
fwrite($socket, $msg);
|
|
$response = fgets($socket);
|
|
fwrite($socket, "QUIT\r\n");
|
|
fclose($socket);
|
|
|
|
$success = strpos($response, '250') !== false;
|
|
echo $success ? "✅ ENVOYÉ!\n" : "❌ FAIL: $response\n";
|
|
|
|
// Log sans foreign key
|
|
$pdo->exec("INSERT INTO admin.brain_learning_log (event_type, data, lesson_learned, created_at) VALUES ('smart_test', '{\"config\":{$config['id']},\"seed\":{$seed['id']},\"status\":\"" . ($success ? 'sent' : 'failed') . "\"}', 'Test config {$config['id']} vers {$seed['isp']}', NOW())");
|