[offer_id]\n"); $domain = 'wevup.app'; $trackBase = "https://wevup.app"; // Pick offer (forced or random with creative) if ($forceOid) { $offer = $pdo->prepare("SELECT o.id, o.name, o.countries, l.value as 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.id=? LIMIT 1"); $offer->execute([$forceOid]); $offer = $offer->fetch(PDO::FETCH_ASSOC); } else { $offer = $pdo->query("SELECT o.id, o.name, o.countries, l.value as url FROM affiliate.offers o JOIN affiliate.links l ON l.offer_id=o.id AND l.type='preview' AND l.value LIKE 'http%' JOIN affiliate.creatives c ON c.offer_id=o.id AND c.status='Activated' ORDER BY RANDOM() LIMIT 1")->fetch(PDO::FETCH_ASSOC); } if (!$offer) die("No offer found\n"); $oid = $offer['id']; // Get SUBJECT from DB (not generic!) $sj = $pdo->query("SELECT value FROM affiliate.subjects WHERE offer_id=$oid ORDER BY RANDOM() LIMIT 1")->fetch(PDO::FETCH_ASSOC); $subject = $sj['value'] ?? 'Special offer for you'; // Get FROM NAME from DB (not generic!) $fn = $pdo->query("SELECT value FROM affiliate.from_names WHERE offer_id=$oid ORDER BY RANDOM() LIMIT 1")->fetch(PDO::FETCH_ASSOC); $fromName = $fn['value'] ?? 'Customer Service'; // Get CREATIVE HTML from DB $cr = $pdo->query("SELECT value FROM affiliate.creatives WHERE offer_id=$oid AND status='Activated' ORDER BY RANDOM() LIMIT 1")->fetch(PDO::FETCH_ASSOC); if (!$cr) die("No creative for offer $oid\n"); $html = base64_decode($cr['value']); // Build tracking URLs $clickUrl = "$trackBase/click.php?url=" . base64_encode($offer['url']) . "&oid=$oid&e=" . urlencode($toEmail); $openPixel = "$trackBase/tracking.php?act=op&oid=$oid&e=" . urlencode($toEmail); $unsubUrl = "$trackBase/click.php?act=unsub&e=" . urlencode($toEmail); // Replace placeholders $html = str_replace(['[url]','[open]','[unsub]'], [$clickUrl, $openPixel, $unsubUrl], $html); // Pick O365 sender $acc = $pdo->query("SELECT email, password FROM admin.email_send_accounts WHERE provider='office365' AND status='active' AND password IS NOT NULL AND password != '' ORDER BY RANDOM() LIMIT 1")->fetch(PDO::FETCH_ASSOC); $fromEmail = 'hello@culturellemejean.charity'; // Log echo "To: $toEmail\n"; echo "From: $fromName <$fromEmail>\n"; echo "Subject: $subject\n"; echo "Offer: #$oid {$offer['name']}\n"; echo "HTML: " . strlen($html) . " bytes\n"; // Send via bcg_local.py $jsonFile = tempnam('/tmp', 'warmup_'); file_put_contents($jsonFile, json_encode([ "to" => $toEmail, "from_email" => $fromEmail, "from_name" => $fromName, "subject" => $subject, "body" => $html, "domain" => $domain ])); $result = trim(shell_exec("python3 /opt/wevads/scripts/bcg_local.py $jsonFile 2>&1")); echo "Result: $result\n"; unlink($jsonFile); // Log to DB $status = (strpos($result, 'OK') !== false || strpos($result, 'Sent') !== false) ? 'sent' : 'failed'; $pdo->prepare("INSERT INTO admin.unified_send_log_new (to_email,from_email,subject,status,send_method,offer_id,offer_name,offer_url_used,country,created_at) VALUES (?,?,?,?,?,?,?,?,?,NOW())") ->execute([$toEmail, $fromEmail, $subject, $status, 'bcg_warmup', $oid, $offer['name'], $offer['url'], $offer['countries']]); echo "Status: $status\n";