Debug activé'; print_r($_REQUEST); } if (defined(DOMAIN)) { exit('
Erreur : Problème de configuration
'); } // check writable work directory if (!is_writable(DATA)) { exit('
Erreur : le répertoire de travail ne peut pas être écrit. Merci de contacter l\'administrateur
'); } // check alias file is_writable if (!is_writable(FICHIERALIAS)) { exit('
Erreur : le fichier d\'alias ne peut pas être écrit. Merci de contacter l\'administrateur
'); } // check blacklist file is_writable if (defined('BLACKLIST') && !is_readable(BLACKLIST)) { exit('
Erreur : un fichier de blacklist est renseigné mais n\'est pas lisible. Merci de contacter l\'administrateur
'); } // check aliasdeny file is_writable if (defined('ALIASDENY') && !is_readable(ALIASDENY)) { exit('
Erreur : un fichier d\'alias interdit est renseigné mais n\'est pas lisible. Merci de contacter l\'administrateur
'); } // Connect DB try { if (preg_match('/^sqlite/', DB)) { $dbco = new PDO(DB); } else { $dbco = new PDO(DB, DBUSER, DBPASS); } $dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch ( PDOException $e ) { die('Connexion à la base '.$e->getMessage()); } // Create DB if not exists try { // status : 0=not verified - 3=disable - 5=active $create = $dbco->query("CREATE TABLE IF NOT EXISTS ".DBTABLEPREFIX."alias ( id INTEGER PRIMARY KEY AUTO_INCREMENT, status INTEGER(1) NOT NULL, alias CHAR(150) NOT NULL UNIQUE, email CHAR(150) NOT NULL, dateCreat DATETIME NOT NULL, dateExpir DATETIME, comment TEXT);"); } catch ( PDOException $e ) { echo '
Erreur à l\'initialisation des tables. Merci de contacter l\'administrateur '; if (DEBUG) { $e->getMessage(); } echo '
'; die(); } ////////////////// // Function ////////////////// // Verification des emails function VerifMXemail($email) { if (CHECKMX) { $domaine=explode('@', $email); $r = new Net_DNS2_Resolver(array('nameservers' => array(NS1, NS2))); try { $result = $r->query($domaine[1], 'MX'); } catch(Net_DNS2_Exception $e) { return false; } if ($result->answer) { return true; } else { return false; } } else { return true; } } // postmap command function UpdateVirtualDB() { // @todo : créer le ficheir à partir de la base //echo exec(BIN_POSTMAP.' '.FICHIERALIAS,$output,$return); } // add new alias function AjouterAlias($status, $alias,$email, $life, $comment) { global $dbco; $dateCreat=date('Y-m-d H:i:s'); if ($life == 0) { $dateExpir=NULL; } else { $dateExpir=date('Y-m-d H:i:s', time()+$life); } $insertcmd = $dbco->prepare("INSERT INTO ".DBTABLEPREFIX."alias (status, alias, email, dateCreat, dateExpir, comment) VALUES ($status, '$alias', '$email', '$dateCreat', '$dateExpir', '$comment')"); $insertcmd->execute(); if (!$insertcmd) { echo '
Erreur pendant l\'ajout dans la base. Merci de contacter l\'administrateur '; if (DEBUG) { print_r($dbco->errorInfo()); } echo '
'; } else { return $dbco->lastInsertId(); } // @todo : a faire UpdateVirtualDB(); } // delete new alias function SupprimerAlias($alias,$email) { // @todo : a faire UpdateVirtualDB(); } // update alias status function UpdateStatusAlias($id, $alias_full, $status) { global $dbco; try { $updatecmd = $dbco->prepare("UPDATE ".DBTABLEPREFIX."alias SET status = $status WHERE id = $id AND alias = '$alias_full'"); $updatecmd->execute(); } catch ( PDOException $e ) { echo "DB error : ", $e->getMessage(); die(); } UpdateVirtualDB(); } // parse file for blacklist and aliasdeny function parseFileRegex($file, $chaine) { $return=false; $handle = fopen($file, 'r'); while (!feof($handle)) { $buffer = fgets($handle); $buffer = str_replace("\n", "", $buffer); if ($buffer) { if (!preg_match('/^(#|$|;)/', $buffer) && preg_match($buffer, $chaine)) { $return=true; break; } } } fclose($handle); return $return; } // Check blacklistemail function BlacklistEmail($email) { if (defined('BLACKLIST')) { return parseFileRegex(BLACKLIST, $email); } else { return false; } } // check aliasdeny function AliasDeny($alias) { if (defined('ALIASDENY')) { return parseFileRegex(ALIASDENY, $alias); } else { return false; } } //// A FAIRE : // list alias function ListeAlias($email) { // @todo : a faire return ($alias); } function SendEmail($recipient, $sujet, $message) { $header = 'From: '.EMAILFROM.'\n'; $header.= 'MIME-Version: 1.0\n'; if (preg_match('#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#', $recipient)) { $header = str_replace('\n', '\r\n', $header); $message = str_replace('\n', '\r\n', $header); } mail($recipient,EMAILTAGSUJET.' '.$sujet,$message,$header); } function urlGen($act,$id,$alias_full) { $idUrl=base64_encode($id.';'.$alias_full); if (URLREWRITE_DEBUT && URLREWRITE_FIN) { return URLREWRITE_DEBUT.$idUrl.URLREWRITE_FIN; } else { return URLPAGE."?act=".$act."&value=".$idUrl; } } ////////////////// // Admin function ////////////////// function CheckUpdate() { //$doc = file_get_contents('http://poubelle.zici.fr/ep_checkupdate'); //echo $doc; } ////////////////// // Start program ////////////////// // Valid email process if (isset($_GET['act']) && $_GET['act'] == 'validemail' && isset($_GET['value'])) { $idUrl = explode(';', base64_decode($_GET['value'])); echo $dbco->query("SELECT COUNT(*) FROM ".DBTABLEPREFIX."alias WHERE id = '".$idUrl[0]."' AND status = 0")->fetchColumn(); if ($dbco->query("SELECT COUNT(*) FROM ".DBTABLEPREFIX."alias WHERE id = '".$idUrl[0]."' AND status = 0")->fetchColumn() != 0) { UpdateStatusAlias($idUrl[0], $idUrl[1], 5); echo '
Votre email poubelle '.$idUrl[1].' est maintenant actif
'; } else { echo '
Erreur : ID introuvable ou déjà validé
'; } } elseif (isset($_GET['dis'])) { // @todo fa faire } elseif (isset($_GET['del'])) { // @todo fa faire // list email process } elseif (isset($_GET['list'])) { $email=strtolower($_REQUEST['email']); if (! filter_var($email, FILTER_VALIDATE_EMAIL)) { echo '
Erreur : Adresse email incorrect
'; } else if (! VerifMXemail($email)) { echo '
Erreur : Adresse email incorrect (2)
'; } else if (!preg_match('#\n[a-z0-9]+@'.DOMAIN.' '.$email.'#', file_get_contents(FICHIERALIAS))) { echo '
Vous n\'avez encore aucun alias d\'actif
'; } else { $header = 'From: '.EMAIL_FROM.'\n'; $header.= 'MIME-Version: 1.0\n'; $message= 'Liste de vos redirections poubelles : \n'; foreach (ListeAlias($email) as $alias) { $message.=' * '.$alias.'\n'; } $message.= 'Pour supprimer un email poubelle vous pouvez vous rendre sur le lien ci-dessou : \n'; $message.= "\t * ".URLPAGE.'\n'; SendEmail($email,'Liste des alias',$message); echo '
Un email vous a été adressé avec la liste de vos emails poubelles actifs.
'; } // Form } elseif (isset($_POST['email']) && isset($_POST['alias'])) { $alias=strtolower($_POST['alias']); $email=strtolower($_POST['email']); $domain=$_POST['domain']; $life=$_POST['life']; $comment=$_POST['comment']; // Check form if (! filter_var($email, FILTER_VALIDATE_EMAIL)) { echo '
Erreur : Adresse email incorrect
'; } else if (! VerifMXemail($email)) { echo '
Erreur : Adresse email incorrect (2)
'; } else if (! preg_match('#^[\w.-]+$#',$alias)) { echo '
Erreur : Format de l\'email poubelle incorrect
'; } else if (! preg_match('#'.$domain.'#',DOMAIN)) { echo '
Erreur : ce domain n\'est pas pris en charge
'; } else if (AliasDeny($alias)) { echo '
Erreur : email poubelle interdit
'; } else if (BlacklistEmail($email)) { echo '
Erreur : vous avez été blacklisté sur ce service
'; // add } elseif (isset($_POST['add'])) { if ($dbco->query("SELECT COUNT(*) FROM ".DBTABLEPREFIX."alias WHERE alias = '".$alias.'@'.$domain."'")->fetchColumn() != 0) { echo '
Erreur : cet email poubelle est déjà utilisé
'; } else { if ($dbco->query("SELECT COUNT(*) FROM ".DBTABLEPREFIX."alias WHERE email = '".$email."' AND status = 5")->fetchColumn() != 0) { AjouterAlias(5, $alias.'@'.$domain, $email, $life, $comment); echo '
Votre email poubelle '.$alias.'@'.$domain.' > '.$email.' est maintenant actif
'; } else { $lastId=AjouterAlias(0, $alias.'@'.$domain, $email, $life, $comment); $message= "Confirmation de la création de votre redirection email poubelle : "; $message= $alias.'@'.$domain.' => '.$email."\n"; $message= "Cliquer sur le lien ci-dessous pour confirmer : \n"; $message.= "\t * ".urlGen('validemail',$lastId,$alias.'@'.$domain)."\n"; $message.= "Pour suspendre temporairement cet email poubelle vous pouvez vous rendre sur le lien ci-dessou : \n"; $message.= "\t * ".urlGen('dis',$lastId,$alias.'@'.$domain)."\n"; $message.= "Pour supprimer cet email poubelle vous pouvez vous rendre sur le lien ci-dessou : \n"; $message.= "\t * ".urlGen('del',$lastId,$alias.'@'.$domain)."\n"; SendEmail($email,'Confirmation alias '.$alias,$message); echo '
Votre email ('.$email.') nous étant inconnu, une confirmation vous a été envoyé par email.
'; } } // delete } else if (isset($_POST['del'])) { if ($id = $dbco->query("SELECT id FROM ".DBTABLEPREFIX."alias WHERE email = '".$email."' AND alias = '".$alias.'@'.$domain."'")->fetchColumn()) { $message= "Confirmation de la création de votre redirection email poubelle : "; $message= $alias.'@'.$domain.' => '.$email."\n"; $message= "Cliquer sur le lien ci-dessous pour confirmer la suppression : \n"; $message.= "\t * ".urlGen('del',$id,$alias.'@'.$domain)."\n\n"; $message.= "Sinon pour suspendre temporairement cet email poubelle vous pouvez vous rendre sur le lien ci-dessou : \n"; $message.= "\t * ".urlGen('dis',$id,$alias.'@'.$domain)."\n"; SendEmail($email,'Suppression de l\'alias '.$alias,$message); echo '
Un email de confirmation vient de vous être envoyé.
'; } else { echo '
Erreur : impossible de trouver cet email poubelle
'; } // disable } else if (isset($_POST['dis'])) { // @todo a faire if ($return=DisableAlias($alias.'@'.$domain,$email)) { echo '
Votre email poubelle '.$alias.'@'.$domain.' est maintenant suspendu !
'; } else { echo '
Erreur : '.$return.'
'; } } if (isset($_POST['memory'])) { setcookie ("email", $email, time() + 31536000); } else if (isset($_COOKIE['email'])) { unset($_COOKIE['email']); } } // Close connexion DB $dbco = null; ////////////////// // Printing form ////////////////// ?>
id="input-email" size="24" border="0" onkeyup="printForm()" onchange="printForm()" /> /> Mémoriser
@'; } else { echo ''; } ?>
- -

Version - Créé par David Mercereau sous licence GNU GPL v3

Télécharger et utiliser ce script sur le site du projet emailPoubelle.php