setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);} catch(Exception $e){die(json_encode(['error'=>$e->getMessage()]));} $isp_map=['gmail.com'=>'GMAIL','outlook.com'=>'OUTLOOK','hotmail.com'=>'OUTLOOK','gmx.de'=>'GMX','t-online.de'=>'T-ONLINE','yahoo.com'=>'YAHOO','orange.fr'=>'ORANGE','free.fr'=>'FREE','ziggo.nl'=>'ZIGGO','web.de'=>'WEB.DE']; switch($action){ case 'list': echo json_encode($db->query("SELECT * FROM admin.seed_addresses WHERE active=true ORDER BY isp")->fetchAll(PDO::FETCH_ASSOC)); break; case 'add': $e=$input['email']??'';$d=strtolower(substr($e,strrpos($e,'@')+1));$isp=$isp_map[$d]??strtoupper(explode('.',$d)[0]); $db->prepare("INSERT INTO admin.seed_addresses(email,isp)VALUES(?,?) ON CONFLICT DO NOTHING")->execute([$e,$isp]); echo json_encode(['added'=>true,'email'=>$e,'isp'=>$isp]); break; case 'test': $seeds=$db->query("SELECT * FROM admin.seed_addresses WHERE active=true")->fetchAll(PDO::FETCH_ASSOC); if(empty($seeds)){echo json_encode(['error'=>'No seeds']);break;} $results=[];foreach($seeds as $s){ $p=json_encode(['action'=>'send','to'=>$s['email'],'subject'=>'[SEED] '.date('Y-m-d H:i'),'html'=>'
Seed test '.date('c').'
','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=>$p,CURLOPT_HTTPHEADER=>['Content-Type: application/json'],CURLOPT_RETURNTRANSFER=>true,CURLOPT_TIMEOUT=>30]); $r=json_decode(curl_exec($ch),true);curl_close($ch);$r['isp']=$s['isp'];$results[]=$r; $db->prepare("UPDATE admin.seed_addresses SET last_test=NOW(),total_tests=total_tests+1 WHERE id=?")->execute([$s['id']]); } echo json_encode(['count'=>count($results),'results'=>$results]); break; case 'report': $s=$db->query("SELECT email,isp,inbox_rate,total_tests,last_test FROM admin.seed_addresses WHERE active=true ORDER BY isp")->fetchAll(PDO::FETCH_ASSOC); echo json_encode(['seeds'=>$s,'avg_inbox'=>count($s)>0?round(array_sum(array_column($s,'inbox_rate'))/count($s),1):0]); break; default: echo json_encode(['actions'=>['list','add','test','report']]); } ?>