mirror of
https://github.com/YunoHost-Apps/emailpoubelle_ynh.git
synced 2024-09-03 18:26:29 +02:00
dev 1.0
- 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:
parent
77418b9121
commit
f05d5714a3
5 changed files with 295 additions and 174 deletions
53
conf.php
53
conf.php
|
@ -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);
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|
|
@ -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');
|
||||||
} else {
|
if ($life == 0) {
|
||||||
$fichier=fopen(FICHIERALIAS,'a+');
|
$dateExpir=NULL;
|
||||||
fputs($fichier, $alias.'@'.DOMAIN.' '.$email."\n");
|
} else {
|
||||||
fclose($fichier);
|
$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 '<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>
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
<div id="b">
|
<div id="b">
|
||||||
<article>
|
<article>
|
||||||
<h1>Emails poubelle libre</h1>
|
<h1>Emails poubelle libre</h1>
|
||||||
<p>Générer des emails poubelle sans contrainte de durée de vie. </p>
|
<p>Générer des emails poubelle sans contrainte de durée de vie. </p>
|
||||||
<?php
|
<?php
|
||||||
// Intégration dans votre site :
|
// Intégration dans votre site :
|
||||||
include('emailPoubelle.php');
|
include('emailPoubelle.php');
|
||||||
|
|
15
stats.sh
15
stats.sh
|
@ -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
|
|
|
@ -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 */
|
||||||
|
|
Loading…
Add table
Reference in a new issue