137 lines
4.5 KiB
Bash
Executable File
137 lines
4.5 KiB
Bash
Executable File
#!/bin/bash
|
|
# WARMUP AVEC MEILLEURES CREATIVES
|
|
# Sélectionne automatiquement la meilleure creative par offre
|
|
# Usage: ./warmup-with-creatives.sh [batch_size] [emails_per_account]
|
|
|
|
BATCH_SIZE=${1:-50}
|
|
EMAILS_PER=${2:-3}
|
|
BATCH_ID="creative_$(date +%Y%m%d_%H%M%S)"
|
|
LOG="/var/log/wevads/warmup-creatives.log"
|
|
TRACKING="http://151.80.235.110"
|
|
|
|
echo "$(date) - Creative warmup: $BATCH_ID" >> $LOG
|
|
echo "🎨 WARMUP WITH BEST CREATIVES"
|
|
echo "📋 Batch: $BATCH_ID | Comptes: $BATCH_SIZE"
|
|
echo ""
|
|
|
|
# Stats
|
|
declare -A ISP_SENT
|
|
|
|
# Comptes O365
|
|
ACCOUNTS=$(PGPASSWORD=admin123 psql -U admin -d adx_system -t -A -c "
|
|
SELECT id, admin_email FROM admin.office_accounts
|
|
WHERE status = 'Active' AND tenant_domain LIKE '%.onmicrosoft.com'
|
|
ORDER BY RANDOM() LIMIT $BATCH_SIZE;
|
|
")
|
|
|
|
TOTAL=0
|
|
ERRORS=0
|
|
|
|
while IFS='|' read -r ACC_ID EMAIL; do
|
|
[ -z "$ACC_ID" ] && continue
|
|
|
|
# Seeds avec ISP
|
|
SEEDS=$(PGPASSWORD=admin123 psql -U admin -d adx_system -t -A -c "
|
|
SELECT id, email,
|
|
CASE
|
|
WHEN email LIKE '%@gmail.com' THEN 'gmail'
|
|
WHEN email LIKE '%@hotmail.%' OR email LIKE '%@outlook.%' THEN 'hotmail'
|
|
WHEN email LIKE '%@yahoo.%' THEN 'yahoo'
|
|
ELSE 'other'
|
|
END
|
|
FROM admin.brain_seeds WHERE is_active = true
|
|
ORDER BY RANDOM() LIMIT $EMAILS_PER;
|
|
")
|
|
|
|
SENT=0
|
|
while IFS='|' read -r SID SEED ISP; do
|
|
[ -z "$SEED" ] && continue
|
|
|
|
# Récupérer offre + meilleure creative
|
|
DATA=$(PGPASSWORD=admin123 psql -U admin -d adx_system -t -A -c "
|
|
SELECT o.id, o.name, c.id, c.subject_line, c.from_name, c.text_body, o.payout_amount
|
|
FROM admin.affiliate_offers o
|
|
JOIN admin.offer_creatives c ON o.id = c.offer_id
|
|
WHERE (o.status = 'active' OR o.is_active = true)
|
|
AND c.status = 'active'
|
|
AND (c.is_winner = true OR c.score >= 50)
|
|
AND ('$ISP' = ANY(o.allowed_isps) OR o.allowed_isps IS NULL)
|
|
ORDER BY c.score DESC, RANDOM()
|
|
LIMIT 1;
|
|
")
|
|
|
|
[ -z "$DATA" ] && continue
|
|
|
|
OID=$(echo "$DATA" | cut -d'|' -f1)
|
|
ONAME=$(echo "$DATA" | cut -d'|' -f2)
|
|
CID=$(echo "$DATA" | cut -d'|' -f3)
|
|
SUBJ=$(echo "$DATA" | cut -d'|' -f4)
|
|
FNAME=$(echo "$DATA" | cut -d'|' -f5)
|
|
BODY=$(echo "$DATA" | cut -d'|' -f6)
|
|
|
|
[ -z "$OID" ] && continue
|
|
|
|
LINK="${TRACKING}/c?o=${OID}&c=${CID}&s=${SID}&b=${BATCH_ID}"
|
|
FINAL_BODY=$(echo "$BODY" | sed "s|{offer_link}|$LINK|g" | sed "s|{unsub}|${TRACKING}/u?s=${SID}|g")
|
|
|
|
# Envoyer
|
|
RES=$(python3 << PYEOF 2>/dev/null
|
|
import smtplib
|
|
from email.mime.text import MIMEText
|
|
from email.mime.multipart import MIMEMultipart
|
|
|
|
try:
|
|
msg = MIMEMultipart('alternative')
|
|
msg['Subject'] = '''$SUBJ'''
|
|
msg['From'] = '$FNAME <$EMAIL>'
|
|
msg['To'] = '$SEED'
|
|
msg['X-Mailer'] = 'Microsoft Outlook 16.0'
|
|
msg.attach(MIMEText('''$FINAL_BODY''', 'plain'))
|
|
|
|
s = smtplib.SMTP('127.0.0.1', 25, timeout=15)
|
|
s.sendmail('$EMAIL', '$SEED', msg.as_string())
|
|
s.quit()
|
|
print("OK")
|
|
except Exception as e:
|
|
print(f"ERR:{e}")
|
|
PYEOF
|
|
)
|
|
|
|
if [[ "$RES" == "OK" ]]; then
|
|
((SENT++))
|
|
((TOTAL++))
|
|
((ISP_SENT[$ISP]++))
|
|
|
|
# Log + update creative usage
|
|
PGPASSWORD=admin123 psql -U admin -d adx_system -q << EOSQL 2>/dev/null
|
|
INSERT INTO admin.brain_warmup_tests
|
|
(test_batch_id, office_account_id, sender_email, recipient_email, recipient_isp,
|
|
config_type, headers_variant, offer_id, offer_name, tracking_link, subject_line)
|
|
VALUES ('$BATCH_ID', $ACC_ID, '$EMAIL', '$SEED', '$ISP',
|
|
'office365', 'exchange', $OID, '$ONAME', '$LINK', '$SUBJ');
|
|
|
|
UPDATE admin.offer_creatives SET times_used = times_used + 1, last_used = NOW() WHERE id = $CID;
|
|
EOSQL
|
|
else
|
|
((ERRORS++))
|
|
fi
|
|
sleep 0.1
|
|
done <<< "$SEEDS"
|
|
|
|
[ $SENT -gt 0 ] && echo "✅ $EMAIL: $SENT sent"
|
|
done <<< "$ACCOUNTS"
|
|
|
|
echo ""
|
|
echo "=============================================="
|
|
echo "📊 CREATIVE WARMUP COMPLETE"
|
|
echo "=============================================="
|
|
echo "Batch: $BATCH_ID"
|
|
echo "Total: $TOTAL | Errors: $ERRORS"
|
|
echo ""
|
|
echo "Par ISP:"
|
|
for isp in "${!ISP_SENT[@]}"; do
|
|
echo " $isp: ${ISP_SENT[$isp]}"
|
|
done
|
|
|
|
echo "$(date) - Done: $TOTAL sent" >> $LOG
|