Files
wevads-platform/scripts/api_brain-smart-send.php
2026-02-26 04:53:11 +01:00

149 lines
6.9 KiB
PHP
Executable File

<?php
/**
* BRAIN-AWARE SEND WRAPPER
* Wraps unified send with Brain Config placeholder resolution
* Endpoint: /api/brain-smart-send.php?action=send|test|preview
*/
header('Content-Type: application/json');
header('Access-Control-Allow-Origin: *');
define('DB_HOST','127.0.0.1');
define('DB_NAME','adx_system');
define('DB_USER','postgres');
define('DB_PASS','');
define('TRACKING_DOMAIN','culturellemejean.charity');
$ISP_MAP = [
'gmx.de'=>'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'] ?? '<p>No body</p>', $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'] ?? '<p>Test</p>');
$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 = '<html><body><p>Thank you for your interest. Please visit our website for more information.</p></body></html>';
$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']);
}