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

77 lines
3.5 KiB
PHP

error_log('=== MARKER: warmup_send.php ===');
<?php
/**
* WARMUP SEND V2 - Uses affiliate.subjects, from_names, creatives
* Usage: php warmup_send.php [email] [offer_id]
*/
$pdo = new PDO("pgsql:host=localhost;dbname=adx_system", "admin", "admin123");
$toEmail = $argv[1] ?? null;
$forceOid = $argv[2] ?? null;
if (!$toEmail) die("Usage: php warmup_send.php <email> [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";