1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/emailpoubelle_ynh.git synced 2024-09-03 18:26:29 +02:00
- 60% add database with PDO (remove plain text)
		support mysql, sqlite, postgresql...
  - 100% add multi-domain support
  - 100% add memory email (with cookies)
  - 50% add life for alias (optional)
  - 100% add comment for alias (optional)
  - 100% add javascript in form (noscript compatible)
This commit is contained in:
David 2013-11-05 17:23:47 +01:00
parent 77418b9121
commit f05d5714a3
5 changed files with 295 additions and 174 deletions

View file

@ -7,39 +7,33 @@
// Home : http://poubelle.zici.fr // Home : http://poubelle.zici.fr
//----------------------------------------------------------- //-----------------------------------------------------------
//error_reporting(0);
define('DEBUG', true); define('DEBUG', true);
// Domain email (separe with ;)
define('DOMAIN', 'exemple.com;zici.fr');
#define('DOMAIN', 'exemple.com');
// PDO stucture
// Exemple pour MYSQL :
// define('DB', 'mysql:host=127.0.0.1;dbname=baseMysql');
// define('DBUSER', 'utilisateurMysql');
// define('DBPASS', 'motdepassedefou');
// Exemple pour Sqlite :
// define('DB', 'sqlite:./data/emailPoubelle.sqlite');
define('DB', 'mysql:host=localhost;dbname=c1_demo');
#define('DB', 'sqlite:./database.sdb');
define('DBUSER', 'c1_demo');
define('DBPASS', 'sqdf2csd4rvn45548');
define('DBTABLEPREFIX', 'ep_');
// writable for script
// Domaine email define('DATA', './data');
define('DOMAIN', 'zici.fr');
// Deux options :
// PLAIN : plaintext, pas de base, simple mais des fonctionnalités en moins
// DB : pdo usage
define('BACKEND', 'DB');
if (BACKEND == 'DB') {
// PDO stucture
// Exemple pour MYSQL :
// define('DB', 'mysql:host=127.0.0.1;dbname=baseMysql');
// define('DBUSER', 'utilisateurMysql');
// define('DBPASS', 'motdepassedefou');
// Exemple pour Sqlite :
// define('DB', 'sqlite:./data/emailPoubelle.sqlite');
define('DB', 'mysql:host=localhost;dbname=c1_demo');
#define('DB', 'sqlite:./database.sdb');
define('DBUSER', 'c1_demo');
define('DBPASS', 'sqdf2csd4rvn45548');
}
// Fichier d'alias postfix // Fichier d'alias postfix
define('FICHIERALIAS', './data/virtual'); define('FICHIERALIAS', DATA.'/virtual');
define('BIN_POSTMAP', '/usr/sbin/postmap'); define('BIN_POSTMAP', '/usr/sbin/postmap');
define('URLPAGE', 'http://'.$_SERVER["SERVER_NAME"].'/'.$_SERVER["REQUEST_URI"]); define('URLPAGE', 'http://'.$_SERVER["SERVER_NAME"].$_SERVER["SCRIPT_NAME"]);
// A indiquer si vous utiliser les URL's rewriting // A indiquer si vous utiliser les URL's rewriting
// Exemple avec un htaccess // Exemple avec un htaccess
@ -51,12 +45,9 @@ define('URLREWRITE_DEBUT', false);
define('URLREWRITE_FIN', false); define('URLREWRITE_FIN', false);
// - Email // - Email
// Sujet de l'email pour la confirmation define('EMAILTAGSUJET', '[EmailPoubelle]');
define('EMAIL_SUJET_CONFIRME', '[EmailPoubelle] Confirmation alias ');
// Sujet de l'email pour la liste des alias
define('EMAIL_SUJET_LISTE', '[EmailPoubelle] Liste des alias ');
// From de l'email // From de l'email
define('EMAIL_FROM', '"NO REPLAY emailPoubelle" <emailpoubelle@exemple.com>'); define('EMAILFROM', '"NO REPLAY emailPoubelle" <emailpoubelle@exemple.com>');
// Alisas interdit : (regex ligne par ligne) - commenter pour désactiver // Alisas interdit : (regex ligne par ligne) - commenter pour désactiver
define('ALIASDENY', './aliasdeny.txt'); define('ALIASDENY', './aliasdeny.txt');
@ -73,4 +64,6 @@ if (CHECKMX) {
define('NS2', '8.8.8.8'); define('NS2', '8.8.8.8');
} }
define('CHECKUPDATE', true);
?> ?>

View file

@ -1,17 +1,17 @@
<?php <?php
//----------------------------------------------------------- //-----------------------------------------------------------
// Email Poubelle // Title : Email Poubelle
// Licence : GNU GPL v3 : http://www.gnu.org/licenses/gpl.html // Licence : GNU GPL v3 : http://www.gnu.org/licenses/gpl.html
// Créateur : David Mercereau - david [aro] mercereau [.] info // Author : David Mercereau - david [aro] mercereau [.] info
// Home : http://poubelle.zici.fr // Home : http://poubelle.zici.fr
// Date : 08/2013 // Date : 08/2013
// Version : 0.4 // Version : 1.0
// Dépendance : Postifx // Depend : Postifx (postmap command) php-pdo
//----------------------------------------------------------- //-----------------------------------------------------------
include_once('./conf.php'); include_once('./conf.php');
define('VERSION', '0.4'); define('VERSION', '1.0');
////////////////// //////////////////
// Init & check // Init & check
@ -24,6 +24,13 @@ if (DEBUG) {
print_r($_REQUEST); print_r($_REQUEST);
} }
if (defined(DOMAIN)) {
exit('<div class="highlight-1">Erreur : Problème de configuration</div>');
}
// check writable work directory
if (!is_writable(DATA)) {
exit('<div class="highlight-1">Erreur : le répertoire de travail ne peut pas être écrit. Merci de contacter l\'administrateur</div>');
}
// check alias file is_writable // check alias file is_writable
if (!is_writable(FICHIERALIAS)) { if (!is_writable(FICHIERALIAS)) {
exit('<div class="highlight-1">Erreur : le fichier d\'alias ne peut pas être écrit. Merci de contacter l\'administrateur</div>'); exit('<div class="highlight-1">Erreur : le fichier d\'alias ne peut pas être écrit. Merci de contacter l\'administrateur</div>');
@ -38,17 +45,32 @@ if (defined('ALIASDENY') && !is_readable(ALIASDENY)) {
} }
// Connect DB // Connect DB
if (BACKEND == 'DB') { try {
try {
if (preg_match('/^sqlite/', DB)) { if (preg_match('/^sqlite/', DB)) {
$dbco = new PDO(DB); $dbco = new PDO(DB);
} else { } else {
$dbco = new PDO(DB, DBUSER, DBPASS); $dbco = new PDO(DB, DBUSER, DBPASS);
} }
$dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $dbco->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch ( PDOException $e ) { } catch ( PDOException $e ) {
die('Connexion à la base '.$e->getMessage()); 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 '<div class="highlight-1">Erreur à l\'initialisation des tables. Merci de contacter l\'administrateur ';
if (DEBUG) { $e->getMessage(); }
echo '</div>';
die();
} }
////////////////// //////////////////
@ -77,30 +99,51 @@ function VerifMXemail($email) {
// postmap command // postmap command
function UpdateVirtualDB() { function UpdateVirtualDB() {
echo exec(BIN_POSTMAP.' '.FICHIERALIAS,$output,$return); // @todo : créer le ficheir à partir de la base
//echo exec(BIN_POSTMAP.' '.FICHIERALIAS,$output,$return);
} }
//// A FAIRE (chian) :
// add new alias // add new alias
function AjouterAlias($alias,$email) { function AjouterAlias($status, $alias,$email, $life, $comment) {
if (BACKEND == 'DB') { global $dbco;
// A faire mais $alais doît changer $dateCreat=date('Y-m-d H:i:s');
if ($life == 0) {
$dateExpir=NULL;
} else { } else {
$fichier=fopen(FICHIERALIAS,'a+'); $dateExpir=date('Y-m-d H:i:s', time()+$life);
fputs($fichier, $alias.'@'.DOMAIN.' '.$email."\n");
fclose($fichier);
} }
$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 '<div class="highlight-1">Erreur pendant l\'ajout dans la base. Merci de contacter l\'administrateur ';
if (DEBUG) {
print_r($dbco->errorInfo());
}
echo '</div>';
} else {
return $dbco->lastInsertId();
}
// @todo : a faire
UpdateVirtualDB(); UpdateVirtualDB();
} }
//// A FAIRE :
// delete new alias // delete new alias
function SupprimerAlias($alias,$email) { function SupprimerAlias($alias,$email) {
file_put_contents(FICHIERALIAS, preg_replace('#\n\#[0-9]+ '.$alias.'@'.DOMAIN.' '.$email.'#U', '', file_get_contents(FICHIERALIAS)/*, 1*/)); // @todo : a faire
file_put_contents(FICHIERALIAS, preg_replace('#\n'.$alias.'@'.DOMAIN.' '.$email.'#U', '', file_get_contents(FICHIERALIAS)/*, 1*/)); UpdateVirtualDB();
# http://www.siteduzero.com/forum-83-542138-p1-supprimer-une-ligne-d-un-fichier-texte-avec-regex.html }
// 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(); UpdateVirtualDB();
} }
@ -144,39 +187,58 @@ function AliasDeny($alias) {
// list alias // list alias
function ListeAlias($email) { function ListeAlias($email) {
$handle = fopen(FICHIERALIAS, 'r'); // @todo : a faire
while (!feof($handle)) {
$buffer = fgets($handle);
if ($buffer) {
$bufferExplode = explode(' ', $buffer);
if (!preg_match('/^(#|$|;)/', $buffer) && preg_match('/^'.$email.'$/', $bufferExplode[1])) {
$alias[]=$bufferExplode[0];
}
}
}
fclose($handle);
return ($alias); 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 // Start program
////////////////// //////////////////
// Valid email process // Valid email process
if (isset($_REQUEST['Validemail'])) { if (isset($_GET['act']) && $_GET['act'] == 'validemail' && isset($_GET['value'])) {
if (preg_match('/#'.$_REQUEST['Validemail'].' [a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+ [a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+/', file_get_contents(FICHIERALIAS),$res)) { $idUrl = explode(';', base64_decode($_GET['value']));
$data=explode(' ', $res[0]); echo $dbco->query("SELECT COUNT(*) FROM ".DBTABLEPREFIX."alias WHERE id = '".$idUrl[0]."' AND status = 0")->fetchColumn();
$aliasExplode=explode('@', $data[1]); if ($dbco->query("SELECT COUNT(*) FROM ".DBTABLEPREFIX."alias WHERE id = '".$idUrl[0]."' AND status = 0")->fetchColumn() != 0) {
$alias=$aliasExplode[0]; UpdateStatusAlias($idUrl[0], $idUrl[1], 5);
$email=$data[2]; echo '<div class="highlight-3">Votre email poubelle <b>'.$idUrl[1].'</b> est maintenant actif</div>';
SupprimerAlias($alias,$email);
AjouterAlias($alias,$email);
echo '<div class="highlight-3">Votre email poubelle <b>'.$alias.'@'.DOMAIN.' > '.$email.'</b> est maintenant actif</div>';
} else { } else {
echo '<div class="highlight-1">Erreur : ID introuvable</div>'; echo '<div class="highlight-1">Erreur : ID introuvable ou déjà validé</div>';
} }
} elseif (isset($_GET['dis'])) {
// @todo fa faire
} elseif (isset($_GET['del'])) {
// @todo fa faire
// list email process // list email process
} elseif (isset($_REQUEST['list'])) { } elseif (isset($_GET['list'])) {
$email=strtolower($_REQUEST['email']); $email=strtolower($_REQUEST['email']);
if (! filter_var($email, FILTER_VALIDATE_EMAIL)) { if (! filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo '<div class="highlight-1">Erreur : Adresse email incorrect</div>'; echo '<div class="highlight-1">Erreur : Adresse email incorrect</div>';
@ -185,100 +247,181 @@ if (isset($_REQUEST['Validemail'])) {
} else if (!preg_match('#\n[a-z0-9]+@'.DOMAIN.' '.$email.'#', file_get_contents(FICHIERALIAS))) { } else if (!preg_match('#\n[a-z0-9]+@'.DOMAIN.' '.$email.'#', file_get_contents(FICHIERALIAS))) {
echo '<div class="highlight-1">Vous n\'avez encore aucun alias d\'actif</div>'; echo '<div class="highlight-1">Vous n\'avez encore aucun alias d\'actif</div>';
} else { } else {
# send email with alias list $header = 'From: '.EMAIL_FROM.'\n';
if (!preg_match('#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#', $email)) { $header.= 'MIME-Version: 1.0\n';
$passage_ligne = "\r\n"; $message= 'Liste de vos redirections poubelles : \n';
} else {
$passage_ligne = "\n";
}
$header = 'From: '.EMAIL_FROM.$passage_ligne;
$header.= 'MIME-Version: 1.0'.$passage_ligne;
$message= 'Liste de vos redirections poubelles : '.$passage_ligne;
foreach (ListeAlias($email) as $alias) { foreach (ListeAlias($email) as $alias) {
$message.=' * '.$alias.$passage_ligne; $message.=' * '.$alias.'\n';
} }
$message.= 'Pour supprimer un email poubelle vous pouvez vous rendre sur le lien ci-dessou : '.$passage_ligne; $message.= 'Pour supprimer un email poubelle vous pouvez vous rendre sur le lien ci-dessou : \n';
$message.= "\t * ".URLPAGE.$passage_ligne; $message.= "\t * ".URLPAGE.'\n';
mail($email,EMAIL_SUJET_LISTE,$message,$header); SendEmail($email,'Liste des alias',$message);
echo '<div class="highlight-3">Un email vous a été adressé avec la liste de vos emails poubelles actifs.</div>'; echo '<div class="highlight-3">Un email vous a été adressé avec la liste de vos emails poubelles actifs.</div>';
} }
// // Form
} elseif (isset($_REQUEST['email']) && isset($_REQUEST['alias'])) { } elseif (isset($_POST['email']) && isset($_POST['alias'])) {
$alias=strtolower($_REQUEST['alias']); $alias=strtolower($_POST['alias']);
$email=strtolower($_REQUEST['email']); $email=strtolower($_POST['email']);
$domain=$_POST['domain'];
$life=$_POST['life'];
$comment=$_POST['comment'];
// Check form
if (! filter_var($email, FILTER_VALIDATE_EMAIL)) { if (! filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo '<div class="highlight-1">Erreur : Adresse email incorrect</div>'; echo '<div class="highlight-1">Erreur : Adresse email incorrect</div>';
} else if (! VerifMXemail($email)) { } else if (! VerifMXemail($email)) {
echo '<div class="highlight-1">Erreur : Adresse email incorrect (2)</div>'; echo '<div class="highlight-1">Erreur : Adresse email incorrect (2)</div>';
} else if (! preg_match('#^[\w.-]+$#',$alias)) { } else if (! preg_match('#^[\w.-]+$#',$alias)) {
echo '<div class="highlight-1">Erreur : email poubelle incorrect</div>'; echo '<div class="highlight-1">Erreur : Format de l\'email poubelle incorrect</div>';
} else if (! preg_match('#'.$domain.'#',DOMAIN)) {
echo '<div class="highlight-1">Erreur : ce domain n\'est pas pris en charge</div>';
} else if (AliasDeny($alias)) { } else if (AliasDeny($alias)) {
echo '<div class="highlight-1">Erreur : email poubelle interdit</div>'; echo '<div class="highlight-1">Erreur : email poubelle interdit</div>';
} else if (BlacklistEmail($email)) { } else if (BlacklistEmail($email)) {
echo '<div class="highlight-1">Erreur : vous avez été blacklisté sur ce service</div>'; echo '<div class="highlight-1">Erreur : vous avez été blacklisté sur ce service</div>';
} elseif (isset($_REQUEST['add'])) { // add
if (preg_match('#\n'.$alias.'@'.DOMAIN.'#', file_get_contents(FICHIERALIAS)) || preg_match('#\n\#[0-9]+ '.$alias.'@'.DOMAIN.'#', file_get_contents(FICHIERALIAS))) { } elseif (isset($_POST['add'])) {
if ($dbco->query("SELECT COUNT(*) FROM ".DBTABLEPREFIX."alias WHERE alias = '".$alias.'@'.$domain."'")->fetchColumn() != 0) {
echo '<div class="highlight-1">Erreur : cet email poubelle est déjà utilisé</div>'; echo '<div class="highlight-1">Erreur : cet email poubelle est déjà utilisé</div>';
} else { } else {
if (preg_match('#\n[a-z0-9]+@'.DOMAIN.' '.$email.'#', file_get_contents(FICHIERALIAS))) { if ($dbco->query("SELECT COUNT(*) FROM ".DBTABLEPREFIX."alias WHERE email = '".$email."' AND status = 5")->fetchColumn() != 0) {
AjouterAlias($alias,$email); AjouterAlias(5, $alias.'@'.$domain, $email, $life, $comment);
echo '<div class="highlight-3">Votre email poubelle <b>'.$alias.'@'.DOMAIN.' > '.$email.'</b> est maintenant actif</div>'; echo '<div class="highlight-3">Votre email poubelle <b>'.$alias.'@'.$domain.' > '.$email.'</b> est maintenant actif</div>';
} else { } else {
$id=rand().date('U'); $lastId=AjouterAlias(0, $alias.'@'.$domain, $email, $life, $comment);
$alias_desactive='#'.$id.' '.$alias; $message= "Confirmation de la création de votre redirection email poubelle : ";
AjouterAlias($alias_desactive,$email,0); $message= $alias.'@'.$domain.' => '.$email."\n";
# Envoi de l'email : $message= "Cliquer sur le lien ci-dessous pour confirmer : \n";
if (!preg_match('#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#', $email)) { $message.= "\t * ".urlGen('validemail',$lastId,$alias.'@'.$domain)."\n";
$passage_ligne = "\r\n"; $message.= "Pour suspendre temporairement cet email poubelle vous pouvez vous rendre sur le lien ci-dessou : \n";
} else { $message.= "\t * ".urlGen('dis',$lastId,$alias.'@'.$domain)."\n";
$passage_ligne = "\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";
$header = 'From: '.EMAIL_FROM.$passage_ligne; SendEmail($email,'Confirmation alias '.$alias,$message);
$header.= 'MIME-Version: 1.0'.$passage_ligne;
$message= 'Confirmation de la création de votre redirection email poubelle : '.$passage_ligne;
$message= $alias.'@'.DOMAIN.' => '.$email.$passage_ligne;
$message= 'Cliquer sur le lien ci-dessous pour confirmer : '.$passage_ligne;
if (URLREWRITE_DEBUT && URLREWRITE_FIN) {
$message.= "\t * ".URLREWRITE_DEBUT.$id.URLREWRITE_FIN.$passage_ligne;
} else {
$message.= "\t * ".URLPAGE.'?Validemail='.$id.$passage_ligne;
}
$message.= 'Pour supprimer cet email poubelle vous pouvez vous rendre sur le lien ci-dessou : '.$passage_ligne;
if (URLREWRITE_DEBUT && URLREWRITE_FIN) {
$message.= "\t * ".URLPAGE.$passage_ligne;
} else {
$message.= "\t * ".URLPAGE.'?sup=true&email='.$email.'&alias='.$alias.$passage_ligne;
}
mail($email,EMAIL_SUJET_CONFIRME.$alias,$message,$header);
echo '<div class="highlight-2">Votre email ('.$email.') nous étant inconnu, une confirmation vous a été envoyé par email.</div>'; echo '<div class="highlight-2">Votre email ('.$email.') nous étant inconnu, une confirmation vous a été envoyé par email.</div>';
} }
} }
} else if (isset($_REQUEST['del'])) { // delete
if (preg_match('#\n'.$alias.'@'.DOMAIN.' '.$email.'#', file_get_contents(FICHIERALIAS)) || preg_match('#\n\#[0-9]+ '.$alias.'@'.DOMAIN.' '.$email.'#', file_get_contents(FICHIERALIAS))) { } else if (isset($_POST['del'])) {
SupprimerAlias($alias,$email); if ($id = $dbco->query("SELECT id FROM ".DBTABLEPREFIX."alias WHERE email = '".$email."' AND alias = '".$alias.'@'.$domain."'")->fetchColumn()) {
echo '<div class="highlight-3">Votre email poubelle <b>'.$alias.'@'.DOMAIN.'</b> est maintenant supprimé !</div>'; $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 '<div class="highlight-2">Un email de confirmation vient de vous être envoyé.</div>';
} else { } else {
echo '<div class="highlight-1">Erreur : l\'email poubelle n\'existe pas</div>'; echo '<div class="highlight-1">Erreur : impossible de trouver cet email poubelle</div>';
} }
// disable
} else if (isset($_POST['dis'])) {
// @todo a faire
if ($return=DisableAlias($alias.'@'.$domain,$email)) {
echo '<div class="highlight-3">Votre email poubelle <b>'.$alias.'@'.$domain.'</b> est maintenant suspendu !</div>';
} else {
echo '<div class="highlight-1">Erreur : '.$return.'</div>';
}
}
if (isset($_POST['memory'])) {
setcookie ("email", $email, time() + 31536000);
} else if (isset($_COOKIE['email'])) {
unset($_COOKIE['email']);
} }
} }
// Close connexion DB // Close connexion DB
if (BACKEND == DB) { $dbco = null;
$dbco = null;
}
////////////////// //////////////////
// Printing form // Printing form
////////////////// //////////////////
?> ?>
<form action="<?= URLPAGE?>" method="post"> <form action="<?= URLPAGE?>" method="post">
<label>Nom de l'email poubelle : </label> <div id="form-email">
<input type="text" name="alias" size="24" border="0" /> @<?= DOMAIN; ?> <label for="email">Votre email réel : </label>
<br /> <input type="text" name="email" <?php if (isset($_COOKIE['email'])) { echo 'value="'.$_COOKIE['email'].'"'; } ?> id="input-email" size="24" border="0" onkeyup="printForm()" onchange="printForm()" />
<label>Votre email réel : </label> <input class="button2" type="submit" name="list" id="button-list" value="Lister" />
<input type="text" name="email" size="24" border="0" /> <input class="" type="submit" name="list" value="Lister" /> <input type="checkbox" name="memory" id="check-memory" <?php if (isset($_COOKIE['email'])) { echo 'checked="checked" '; } ?>/> Mémoriser
<br /> </div>
<input class="button" type="submit" name="add" value="Créer" /> ou <div id="form-alias">
<input class="button" type="submit" name="del" value="Supprimer" /> la redirection poubelle <label for="alias">Nom de l'email poubelle : </label>
<input type="text" name="alias" id="input-alias" size="24" border="0" onkeyup="printForm()" onchange="printForm()" placeholder="Ex : jean-petiteannonce" /> @<?php
$domains = explode(';', DOMAIN);
if (count($domains) == 1) {
echo DOMAIN.'<input type="hidden" value="'.DOMAIN.'" name="domain" id="input-domain" />';
} else {
echo '<select name="domain" id="input-domain">';
foreach ($domains as $one_domain) {
echo '<option value="'.$one_domain.'">'.$one_domain.'</option>';
}
echo '</select>';
}
?>
<select name="life" id="input-life">
<option value="0">Illimité</option>
<option value="7200">2 heure</option>
<option value="21600">6 heures</option>
<option value="86400">1 jour</option>
<option value="604800">7 jours</option>
<option value="1296000">15 jours</option>
<option value="2592000">30 jours</option>
<option value="7776000">90 jours</option>
</select>
</div>
<div id="form-comment">
<label for="comment">Un commentaire pour l'ajout ? (pour votre mémoire)</label>
<input type="text" name="comment" size="54" placeholder="Ex : Inscription sur zici.fr" />
</div>
<div id="form-submit">
<input class="button" type="submit" id="button-add" name="add" value="Activer" /> -
<input class="button" type="submit" id="button-dis" name="dis" value="Susprendre" /> -
<input class="button" type="submit" id="button-del" name="del" value="Supprimer" />
</div>
</form> </form>
<script type="text/javascript">
function validateEmail(email) {
var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
return re.test(email);
}
function printForm() {
console.log("appel de la fonction : " + document.getElementById('input-email').value + document.getElementById('input-alias').value);
if (validateEmail(document.getElementById('input-email').value) && document.getElementById('input-alias').value != '') {
console.log("Les 2 sont OK");
document.getElementById('input-alias').disabled = false;
document.getElementById('input-domain').disabled = false;
document.getElementById('button-list').disabled = false;
document.getElementById('button-add').disabled = false;
document.getElementById('button-dis').disabled = false;
document.getElementById('button-del').disabled = false;
document.getElementById('input-life').disabled = false;
document.getElementById('form-comment').style.display = "block" ;
} else if (validateEmail(document.getElementById('input-email').value)) {
console.log("email ok");
document.getElementById('input-alias').disabled = false;
document.getElementById('input-domain').disabled = false;
document.getElementById('button-list').disabled = false;
document.getElementById('input-life').disabled = false;
document.getElementById('form-comment').style.display = "display" ;
document.getElementById('button-add').disabled = true;
document.getElementById('button-dis').disabled = true;
document.getElementById('button-del').disabled = true;
document.getElementById('input-life').disabled = true;
document.getElementById('form-comment').style.display = "none" ;
} else {
console.log("rien OK");
document.getElementById('input-alias').disabled = true;
document.getElementById('input-domain').disabled = true;
document.getElementById('button-list').disabled = true;
document.getElementById('button-add').disabled = true;
document.getElementById('button-dis').disabled = true;
document.getElementById('button-del').disabled = true;
document.getElementById('input-life').disabled = true;
document.getElementById('form-comment').style.display = "none" ;
}
}
printForm();
</script>
<p>Version <?= VERSION ?> - Créé par David Mercereau sous licence GNU GPL v3</p> <p>Version <?= VERSION ?> - Créé par David Mercereau sous licence GNU GPL v3</p>
<p>Télécharger et utiliser ce script sur le site du projet <a target="_blank" href="http://forge.zici.fr/p/emailpoubelle-php/">emailPoubelle.php</a></p> <p>Télécharger et utiliser ce script sur le site du projet <a target="_blank" href="http://forge.zici.fr/p/emailpoubelle-php/">emailPoubelle.php</a></p>

View file

@ -1,15 +0,0 @@
#!/bin/bash
# @todo : A adapter en php
FICHIERALIAS="./postfix/virtual"
echo
echo "#### Statistique emailJetable.php ####"
echo
echo "Nombre d'email validé : `grep -v "^#" $FICHIERALIAS | wc -l`
echo "Nombre d'email n'ayant pas été validé : `grep "^#" $FICHIERALIAS | wc -l`
echo
echo "Top 30 :"
grep -v "^#" $FICHIERALIAS | cut -d" " -f2 | sort | uniq -c | sort -nr | head -n 30
echo

View file

@ -35,7 +35,7 @@ A {
} }
H1, H3, H4, H5, H6 { H1, H3, H4, H5, H6 {
background : url(../i/ai4.png) no-repeat 0 7px; background : url(./ai4.png) no-repeat 0 7px;
border-bottom : 1px dotted #B5B3A9; border-bottom : 1px dotted #B5B3A9;
color : #333; color : #333;
font-weight : bold; font-weight : bold;
@ -43,7 +43,7 @@ H1, H3, H4, H5, H6 {
padding : 0 0 0 25px; padding : 0 0 0 25px;
} }
H1 { H1 {
background : url(../i/ai4.png) no-repeat 0 6px; background : url(./ai4.png) no-repeat 0 6px;
font-size : 15px; font-size : 15px;
} }
H2 { H2 {
@ -51,7 +51,7 @@ H1, H3, H4, H5, H6 {
margin : 0 0 20px 0; margin : 0 0 20px 0;
} }
H3 { H3 {
background : url(../i/ai5.png) no-repeat 0 7px; background : url(./ai5.png) no-repeat 0 7px;
} }
H3, H4, H5, H6 { H3, H4, H5, H6 {
font-size : 13px; font-size : 13px;
@ -65,7 +65,7 @@ SUP {
header { header {
-moz-border-radius : 4px; -moz-border-radius : 4px;
-webkit-border-radius : 4px; -webkit-border-radius : 4px;
background : #006699 url(../i/hd.jpg) no-repeat top left; background : #006699 url(./hd.jpg) no-repeat top left;
margin : 0 0 10px 0; margin : 0 0 10px 0;
padding : 10px 10px; padding : 10px 10px;
position : relative; position : relative;
@ -233,7 +233,7 @@ article form {
border : 1px solid #CCC; border : 1px solid #CCC;
font-size : 11px; font-size : 11px;
padding : 4px 5px; padding : 4px 5px;
width : 458px; /*width : 458px;*/
} }
article input { article input {
margin : 0 0 10px; margin : 0 0 10px;
@ -261,7 +261,7 @@ article ul, aside ul {
margin : 0 0 20px 23px; margin : 0 0 20px 23px;
} }
article ul li { article ul li {
background : url(../i/ai2.png) no-repeat 0 8px; background : url(./ai2.png) no-repeat 0 8px;
padding : 0 0 0 17px; padding : 0 0 0 17px;
} }
@ -295,7 +295,7 @@ nav ul {
list-style : none; list-style : none;
} }
nav li { nav li {
background : url(../i/ai1.png) no-repeat 0 8px; background : url(./ai1.png) no-repeat 0 8px;
padding : 0 0 0 15px; padding : 0 0 0 15px;
} }
nav li ul, aside li ul li ul { nav li ul, aside li ul li ul {
@ -308,10 +308,10 @@ nav ul {
font-size : 10px; font-size : 10px;
} }
nav li li li, aside li.active li li { nav li li li, aside li.active li li {
background : url(../i/ai8.png) no-repeat 0 10px; background : url(./ai8.png) no-repeat 0 10px;
} }
nav li.active, aside li.active li { nav li.active, aside li.active li {
background : url(../i/ai2.png) no-repeat 0 8px; background : url(./ai2.png) no-repeat 0 8px;
} }
/* Gallery */ /* Gallery */