'GMX','gmx.net'=>'GMX','gmx.com'=>'GMX','web.de'=>'WEB.DE','freenet.de'=>'FREENET', 't-online.de'=>'T-ONLINE','magenta.de'=>'T-ONLINE','orange.fr'=>'ORANGE','wanadoo.fr'=>'ORANGE', 'laposte.net'=>'LAPOSTE','sfr.fr'=>'SFR','free.fr'=>'FREE','aliceadsl.fr'=>'ALICE', 'gmail.com'=>'GMAIL','googlemail.com'=>'GMAIL','outlook.com'=>'OUTLOOK','hotmail.com'=>'OUTLOOK', 'hotmail.fr'=>'OUTLOOK','live.com'=>'OUTLOOK','live.fr'=>'OUTLOOK','msn.com'=>'OUTLOOK', 'yahoo.com'=>'YAHOO','yahoo.fr'=>'YAHOO','ymail.com'=>'YAHOO','aol.com'=>'AOL', 'ziggo.nl'=>'ZIGGO','kpnmail.nl'=>'KPN','libero.it'=>'LIBERO','btinternet.com'=>'BT', 'icloud.com'=>'ICLOUD','protonmail.com'=>'PROTON','proton.me'=>'PROTON','bluewin.ch'=>'BLUEWIN', ]; $db = new PDO("pgsql:host=".DB_HOST.";dbname=".DB_NAME,DB_USER,DB_PASS); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $input = json_decode(file_get_contents('php://input'), true) ?: array_merge($_POST, $_GET); $action = $input['action'] ?? 'preview'; function resolvePlaceholders($text, $to, $domain) { $eb64 = base64_encode($to); $fn = ucfirst(explode('@', $to)[0]); $map = [ '[email]'=>$to, '[email_b64]'=>$eb64, '[domain]'=>$domain, '[rdns]'=>$domain, '[fname]'=>$fn, '[lname]'=>'', '[Name]'=>$fn, '[first_name]'=>$fn, '[last_name]'=>'', '[company]'=>'WEVADS', '[mail_date]'=>date('r'), '[date]'=>date('d/m/Y'), '[time]'=>date('H:i'), '[a_7]'=>substr(str_shuffle('abcdefghijklmnopqrstuvwxyz'),0,7), '[n_5]'=>str_pad(rand(0,99999),5,'0',STR_PAD_LEFT), '[n_3]'=>str_pad(rand(0,999),3,'0',STR_PAD_LEFT), '[a_3]'=>substr(str_shuffle('abcdefghijklmnopqrstuvwxyz'),0,3), ]; return str_replace(array_keys($map), array_values($map), $text); } function getBrainConfig($db, $isp) { $st = $db->prepare("SELECT * FROM admin.brain_configs WHERE isp_target=:i AND is_active=TRUE AND is_winner=TRUE ORDER BY inbox_rate DESC LIMIT 1"); $st->execute([':i'=>$isp]); return $st->fetch(PDO::FETCH_ASSOC); } function detectISP($email) { global $ISP_MAP; $d = strtolower(substr($email, strrpos($email, '@')+1)); return $ISP_MAP[$d] ?? 'UNKNOWN'; } function buildFullHeaders($cfg, $to, $domain) { $h = "MIME-Version: 1.0\r\n"; $h .= "Message-Id: <" . substr(str_shuffle('abcdefghijklmnopqrstuvwxyz'),0,7) . str_pad(rand(0,99999),5,'0',STR_PAD_LEFT) . str_pad(rand(0,999),3,'0',STR_PAD_LEFT) . substr(str_shuffle('abcdefghijklmnopqrstuvwxyz'),0,3) . base64_encode($to) . "@" . $domain . ">\r\n"; $h .= "From: " . ($cfg['from_name'] ?: '"Service"') . " <" . ($cfg['from_email'] ?: "info@$domain") . ">\r\n"; $h .= "Subject: " . ($cfg['subject_template'] ?: 'Notification') . "\r\n"; $h .= "To: $to\r\n"; $enc = $cfg['encoding'] ?: 'quoted-printable'; $h .= "Content-Transfer-Encoding: $enc\r\n"; $ct = $cfg['content_type'] ?: 'multipart/alternative'; $charset = $cfg['charset'] ?: 'utf-8'; if (strpos($ct,'charset')===false && strpos($ct,'multipart')===false) $ct .= "; charset=$charset"; $h .= "Content-Type: $ct\r\n"; $h .= "Date: " . date('r') . "\r\n"; for ($i=1;$i<=5;$i++) { $n=$cfg["header_{$i}_name"]??''; $v=$cfg["header_{$i}_value"]??''; if ($n && $v) $h .= "$n: $v\r\n"; } return resolvePlaceholders($h, $to, $domain); } switch($action) { case 'preview': $to = $input['to'] ?? 'test@gmail.com'; $isp = detectISP($to); $cfg = getBrainConfig($db, $isp); if (!$cfg) { echo json_encode(['error'=>"No brain config for ISP: $isp"]); break; } $headers = buildFullHeaders($cfg, $to, TRACKING_DOMAIN); $body = resolvePlaceholders($cfg['body_template'] ?? '
No body
', $to, TRACKING_DOMAIN); echo json_encode([ 'isp'=>$isp, 'config_id'=>$cfg['id'], 'inbox_rate'=>$cfg['inbox_rate'], 'headers'=>$headers, 'body'=>$body, 'send_method'=>$cfg['send_method'], 'placeholders_resolved'=>true ]); break; case 'send': $to = $input['to'] ?? ''; if (!$to) { echo json_encode(['error'=>'Missing to']); break; } $isp = detectISP($to); $cfg = getBrainConfig($db, $isp); // Build resolved parameters $dom = TRACKING_DOMAIN; $from = $cfg ? (($cfg['from_name'] ?: '"Service"') . ' <' . ($cfg['from_email'] ?: "info@$dom") . '>') : "send@$dom"; $subj = $cfg['subject_template'] ?? ($input['subject'] ?? 'Notification'); $html = $cfg['body_template'] ?? ($input['html'] ?? 'Test
'); $from = resolvePlaceholders($from, $to, $dom); $subj = resolvePlaceholders($subj, $to, $dom); $html = resolvePlaceholders($html, $to, $dom); // Delegate to unified send $payload = json_encode(['action'=>'send','to'=>$to,'from'=>$from,'subject'=>$subj,'html'=>$html,'method'=>$input['method']??'auto']); $ch = curl_init('http://127.0.0.1:5890/api/brain-unified-send.php'); curl_setopt_array($ch, [CURLOPT_POST=>true, CURLOPT_POSTFIELDS=>$payload, CURLOPT_RETURNTRANSFER=>true, CURLOPT_HTTPHEADER=>['Content-Type: application/json']]); $resp = curl_exec($ch); curl_close($ch); $result = json_decode($resp, true) ?: ['error'=>'Send failed']; $result['brain_config_id'] = $cfg['id'] ?? null; $result['isp'] = $isp; $result['placeholders_resolved'] = true; echo json_encode($result); break; case 'warmup_send': // For warmup: use brain config but with warmup-safe content $to = $input['to'] ?? ''; if (!$to) { echo json_encode(['error'=>'Missing to']); break; } $isp = detectISP($to); $cfg = getBrainConfig($db, $isp); $dom = TRACKING_DOMAIN; // Warmup uses the same headers but simpler body $from = $cfg ? (($cfg['from_name'] ?: '"Service"') . ' <' . ($cfg['from_email'] ?: "info@$dom") . '>') : "send@$dom"; $subj = $cfg['subject_template'] ?? 'Hello'; $html = 'Thank you for your interest. Please visit our website for more information.
'; $from = resolvePlaceholders($from, $to, $dom); $subj = resolvePlaceholders($subj, $to, $dom); $payload = json_encode(['action'=>'send','to'=>$to,'from'=>$from,'subject'=>$subj,'html'=>$html,'method'=>$input['method']??'auto','campaign_id'=>0]); $ch = curl_init('http://127.0.0.1:5890/api/brain-unified-send.php'); curl_setopt_array($ch, [CURLOPT_POST=>true, CURLOPT_POSTFIELDS=>$payload, CURLOPT_RETURNTRANSFER=>true, CURLOPT_HTTPHEADER=>['Content-Type: application/json']]); $resp = curl_exec($ch); curl_close($ch); echo $resp; break; default: echo json_encode(['actions'=>['preview','send','warmup_send'],'usage'=>'?action=preview&to=test@gmail.com']); }