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
//////////////////
?>
Version = VERSION ?> - Créé par David Mercereau sous licence GNU GPL v3
Télécharger et utiliser ce script sur le site du projet emailPoubelle.php