91 lines
5.1 KiB
PHP
Executable File
91 lines
5.1 KiB
PHP
Executable File
<?php
|
|
/**
|
|
* BRAIN SEND v2 - Real creatives + tracking + proper content
|
|
* Usage: php brain_send_v2.php [offer_id] [isp_target] [email]
|
|
*/
|
|
$pdo = new PDO("pgsql:host=localhost;dbname=adx_system", "admin", "admin123");
|
|
$toEmail = $argv[3] ?? null;
|
|
$ispTarget = strtoupper($argv[2] ?? 'GMAIL');
|
|
$requestedOffer = $argv[1] ?? null;
|
|
|
|
// 1. Get winner config
|
|
$winner = $pdo->query("SELECT c.*, w.inbox_rate FROM admin.brain_configs c JOIN admin.brain_winners w ON w.config_id = c.id WHERE w.is_active = true ORDER BY w.inbox_rate DESC LIMIT 1")->fetch(PDO::FETCH_ASSOC);
|
|
if (!$winner) die("❌ No winner config\n");
|
|
|
|
// 2. Get offer WITH real sponsor link
|
|
if ($requestedOffer) {
|
|
$offer = $pdo->query("SELECT o.id, o.name, l.value as sponsor_url FROM affiliate.offers o LEFT JOIN affiliate.links l ON l.offer_id=o.id AND l.type='preview' AND l.value LIKE 'http%' WHERE o.id = $requestedOffer LIMIT 1")->fetch(PDO::FETCH_ASSOC);
|
|
} else {
|
|
$offer = $pdo->query("SELECT o.id, o.name, l.value as sponsor_url FROM affiliate.offers o JOIN affiliate.links l ON l.offer_id=o.id AND l.type='preview' AND l.value LIKE 'http%' WHERE o.status = 'Activated' ORDER BY RANDOM() LIMIT 1")->fetch(PDO::FETCH_ASSOC);
|
|
}
|
|
if (!$offer) die("❌ No offer with sponsor link\n");
|
|
|
|
// 3. Get from_name and subject (NEVER raw offer name)
|
|
$fn = $pdo->query("SELECT value FROM affiliate.from_names WHERE offer_id = {$offer['id']} ORDER BY RANDOM() LIMIT 1")->fetch(PDO::FETCH_ASSOC);
|
|
$sj = $pdo->query("SELECT value FROM affiliate.subjects WHERE offer_id = {$offer['id']} ORDER BY RANDOM() LIMIT 1")->fetch(PDO::FETCH_ASSOC);
|
|
$fromName = $fn['value'] ?? 'Customer Support';
|
|
$subject = $sj['value'] ?? 'Important notification';
|
|
|
|
// 4. Build tracking URLs
|
|
$domain = $winner['domain_used'] ?: 'wevup.app';
|
|
$fromEmail = "hello@$domain";
|
|
$trackBase = "https://wevup.app";
|
|
$clickUrl = "$trackBase/click.php?url=" . base64_encode($offer['sponsor_url']) . "&oid={$offer['id']}&e=" . urlencode($toEmail);
|
|
$openPixel = "$trackBase/tracking.php?act=op&oid={$offer['id']}&e=" . urlencode($toEmail);
|
|
$unsubUrl = "$trackBase/click.php?url=" . base64_encode("https://wevup.app/unsub.php") . "&act=unsub&e=" . urlencode($toEmail);
|
|
|
|
// 5. Build proper HTML creative (NEVER expose raw offer name)
|
|
$body = <<<HTML
|
|
<!DOCTYPE html>
|
|
<html>
|
|
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width"></head>
|
|
<body style="margin:0;padding:0;background:#f4f4f7;">
|
|
<table width="100%" cellpadding="0" cellspacing="0" style="background:#f4f4f7;padding:40px 20px;">
|
|
<tr><td align="center">
|
|
<table width="600" cellpadding="0" cellspacing="0" style="background:#ffffff;border-radius:8px;overflow:hidden;box-shadow:0 2px 8px rgba(0,0,0,0.06);">
|
|
<tr><td style="background:#1a73e8;padding:24px 30px;">
|
|
<span style="color:#ffffff;font-family:Helvetica,Arial,sans-serif;font-size:20px;font-weight:bold;">$fromName</span>
|
|
</td></tr>
|
|
<tr><td style="padding:30px;font-family:Helvetica,Arial,sans-serif;">
|
|
<p style="color:#333;font-size:16px;line-height:1.6;margin:0 0 15px;">Dear Customer,</p>
|
|
<p style="color:#555;font-size:15px;line-height:1.7;margin:0 0 15px;">$subject</p>
|
|
<p style="color:#555;font-size:15px;line-height:1.7;margin:0 0 25px;">We have prepared something special for you. Take a moment to review the details below.</p>
|
|
<table cellpadding="0" cellspacing="0" style="margin:0 auto 25px;">
|
|
<tr><td style="background:#1a73e8;border-radius:6px;padding:14px 35px;">
|
|
<a href="$clickUrl" style="color:#ffffff;font-family:Helvetica,Arial,sans-serif;font-size:16px;font-weight:bold;text-decoration:none;display:block;">View Details →</a>
|
|
</td></tr></table>
|
|
<p style="color:#888;font-size:13px;line-height:1.5;margin:0;">If you did not request this, you can safely ignore this message.</p>
|
|
</td></tr>
|
|
<tr><td style="background:#f8f9fa;padding:20px 30px;border-top:1px solid #eee;">
|
|
<p style="color:#aaa;font-family:Helvetica,Arial,sans-serif;font-size:11px;margin:0;text-align:center;">
|
|
You received this because you subscribed to our updates.<br>
|
|
<a href="$unsubUrl" style="color:#aaa;">Unsubscribe</a> | <a href="$unsubUrl" style="color:#aaa;">Manage preferences</a>
|
|
</p>
|
|
</td></tr>
|
|
</table>
|
|
</td></tr></table>
|
|
<img src="$openPixel" width="1" height="1" style="display:none;" alt="">
|
|
</body>
|
|
</html>
|
|
HTML;
|
|
|
|
echo "🚀 BRAIN SEND v2\n";
|
|
echo " Offer: #{$offer['id']}\n";
|
|
echo " From: $fromName <$fromEmail>\n";
|
|
echo " Subject: $subject\n";
|
|
echo " To: $toEmail\n";
|
|
echo " Sponsor: " . substr($offer['sponsor_url'], 0, 60) . "\n";
|
|
echo " Click: " . substr($clickUrl, 0, 60) . "...\n";
|
|
echo " Open pixel: ✅\n\n";
|
|
|
|
// 6. Send via BCG relay
|
|
$jsonFile = tempnam("/tmp", "brain_v2_");
|
|
$emailData = json_encode(["to" => $toEmail, "from_email" => $fromEmail, "from_name" => $fromName, "subject" => $subject, "body" => $body, "domain" => $domain]);
|
|
file_put_contents($jsonFile, $emailData);
|
|
$response = trim(shell_exec("python3 /opt/wevads/scripts/bcg_relay.py " . escapeshellarg($jsonFile) . " 2>&1"));
|
|
@unlink($jsonFile);
|
|
|
|
$pdo->exec("UPDATE admin.brain_winners SET times_used = times_used + 1, last_used_at = NOW() WHERE config_id = {$winner['id']}");
|
|
|
|
echo strpos($response, 'OK') !== false ? "✅ SENT!\n" : "❌ FAIL: $response\n";
|