mirror of
https://github.com/YunoHost-Apps/emailpoubelle_ynh.git
synced 2024-09-03 18:26:29 +02:00
Passage en version 0.3
- Blacklist & AliasDeny en regex - Lister tous les alias actifs
This commit is contained in:
parent
88a6195067
commit
08681ebfb6
4 changed files with 154 additions and 56 deletions
22
aliasdeny.txt
Normal file
22
aliasdeny.txt
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
/^root$/
|
||||||
|
/^mail$/
|
||||||
|
/^email$/
|
||||||
|
/^test$/
|
||||||
|
/^toto$/
|
||||||
|
/^www-data$/
|
||||||
|
/^www-owne$/
|
||||||
|
/^manager$/
|
||||||
|
/^admin$/
|
||||||
|
/postmaster/
|
||||||
|
/^MAILER-DAEMON$/
|
||||||
|
/^abuse$/
|
||||||
|
/^spam$/
|
||||||
|
/^backup$/
|
||||||
|
/^list$/
|
||||||
|
/^nobody$/
|
||||||
|
/^vmail$/
|
||||||
|
/^mysql$/
|
||||||
|
/^web$/
|
||||||
|
/^git$/
|
||||||
|
/^mail$/
|
||||||
|
/^[1-9]+$/
|
4
blacklist.txt
Normal file
4
blacklist.txt
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
/^exemple@exemple.com$/
|
||||||
|
/.pl$/
|
||||||
|
/^exemple[1-9]+@toto.fr$/
|
||||||
|
|
77
conf.php
77
conf.php
|
@ -1,63 +1,52 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
//-----------------------------------------------------------
|
//-----------------------------------------------------------
|
||||||
// Emeail Poubelle config
|
// emailPoubelle config
|
||||||
// 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 [.] mercereau [aro] zici [.] fr
|
// Créateur : David Mercereau - david [.] mercereau [aro] zici [.] fr
|
||||||
// Home : http://zici.fr/emailPoubelle.html
|
// Home : http://poubelle.zici.fr
|
||||||
//-----------------------------------------------------------
|
//-----------------------------------------------------------
|
||||||
|
|
||||||
define('VERSION', '0.2');
|
error_reporting(0);
|
||||||
|
|
||||||
|
define('VERSION', '0.3');
|
||||||
|
|
||||||
|
// Domaine email
|
||||||
define('DOMAIN', 'zici.fr');
|
define('DOMAIN', 'zici.fr');
|
||||||
|
|
||||||
// Serveur DNS pour la résolution/vérification du nom de domaine
|
// Serveur DNS pour la résolution/vérification du nom de domaine
|
||||||
define('NS1', 'ns1.fdn.org');
|
define('NS1', 'ns1.fdn.org');
|
||||||
define('NS2', '8.8.8.8');
|
define('NS2', '8.8.8.8');
|
||||||
|
|
||||||
if (basename($_SERVER['SCRIPT_FILENAME']) == 'emailPoubelle_dev.php') {
|
define('DEBUG', false);
|
||||||
# Dev
|
|
||||||
define('DEBUG', true);
|
|
||||||
error_reporting(E_ALL);
|
|
||||||
|
|
||||||
define('FICHIERALIAS', './postfix/virtual_debug');
|
|
||||||
|
|
||||||
define('URLPAGE', 'http://www.zici.fr/emailPoubelle/emailPoubelle_dev.php');
|
|
||||||
|
|
||||||
// A indiquer si vous utiliser les URL's rewriting
|
|
||||||
// Exemple avec un htaccess
|
|
||||||
// RewriteRule ^EmailPoubell-([0-9]+)\.html$ index.php?page=emailPoubelle&Validemail=$1 [L]
|
|
||||||
#define('URLREWRITE_DEBUT', 'http://www.zici.fr/EmailPoubell-');
|
|
||||||
#define('URLREWRITE_FIN', '.html');
|
|
||||||
// Désactiver
|
|
||||||
define('URLREWRITE_DEBUT', false);
|
|
||||||
define('URLREWRITE_FIN', false);
|
|
||||||
} else {
|
|
||||||
# Prod
|
|
||||||
error_reporting(0);
|
|
||||||
define('DEBUG', false);
|
|
||||||
|
|
||||||
define('FICHIERALIAS', './emailPoubelle/postfix/virtual');
|
|
||||||
|
|
||||||
define('URLPAGE', 'http://www.zici.fr/emailPoubelle.html');
|
|
||||||
|
|
||||||
// A indiquer si vous utiliser les URL's rewriting
|
|
||||||
// Exemple avec un htaccess
|
|
||||||
// RewriteRule ^EmailPoubell-([0-9]+)\.html$ index.php?page=emailPoubelle&Validemail=$1 [L]
|
|
||||||
define('URLREWRITE_DEBUT', 'http://www.zici.fr/EmailPoubell-');
|
|
||||||
define('URLREWRITE_FIN', '.html');
|
|
||||||
// Désactiver
|
|
||||||
# define('URLREWRITE_DEBUT', false);
|
|
||||||
# define('URLREWRITE_FIN', false);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
// Fichier d'alias postfix
|
||||||
|
define('FICHIERALIAS', './emailPoubelle/postfix/virtual');
|
||||||
define('BIN_POSTMAP', '/usr/sbin/postmap');
|
define('BIN_POSTMAP', '/usr/sbin/postmap');
|
||||||
|
|
||||||
// Email de confirmation
|
define('URLPAGE', 'http://www.zici.fr/emailPoubelle.html');
|
||||||
define('EMAIL_SUJET', '[zici] [EmailPoubelle] Confirmation alias ');
|
|
||||||
|
// A indiquer si vous utiliser les URL's rewriting
|
||||||
|
// Exemple avec un htaccess
|
||||||
|
// RewriteRule ^EmailPoubell-([0-9]+)\.html$ index.php?page=emailPoubelle&Validemail=$1 [L]
|
||||||
|
define('URLREWRITE_DEBUT', 'http://www.zici.fr/EmailPoubell-');
|
||||||
|
define('URLREWRITE_FIN', '.html');
|
||||||
|
// Désactiver
|
||||||
|
# define('URLREWRITE_DEBUT', false);
|
||||||
|
# define('URLREWRITE_FIN', false);
|
||||||
|
|
||||||
|
// - Email
|
||||||
|
// Sujet de l'email pour la confirmation
|
||||||
|
define('EMAIL_SUJET_CONFIRME', '[zici] [EmailPoubelle] Confirmation alias ');
|
||||||
|
// Sujet de l'email pour la liste des alias
|
||||||
|
define('EMAIL_SUJET_LISTE', '[zici] [EmailPoubelle] Liste des alias ');
|
||||||
|
// From de l'email
|
||||||
define('EMAIL_FROM', '"NO REPLAY emailPoubelle" <emailpoubelle@zici.fr>');
|
define('EMAIL_FROM', '"NO REPLAY emailPoubelle" <emailpoubelle@zici.fr>');
|
||||||
|
|
||||||
# Alisas interdit :
|
// Alisas interdit : (regex ligne par ligne) - commenter pour désactiver
|
||||||
$aliasInterditListe = array('root', 'mail', 'email', 'test', 'toto', 'www-data', 'www-owne', 'manager', 'admin', 'postmaster', 'MAILER-DAEMON', 'abuse', 'spam', 'backup', 'list', 'nobody', 'vmail', 'mysql', 'web', 'git');
|
define('ALIASDENY', './emailPoubelle/aliasdeny.txt');
|
||||||
|
|
||||||
|
// Blackliste d'email : (regex ligne par ligne) - commenter pour désactiver
|
||||||
|
define('BLACKLIST', './emailPoubelle/blacklist.txt');
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|
|
@ -5,16 +5,22 @@
|
||||||
// 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 [.] mercereau [aro] zici [.] fr
|
// Créateur : David Mercereau - david [.] mercereau [aro] zici [.] fr
|
||||||
// Home : http://poubelle.zici.fr
|
// Home : http://poubelle.zici.fr
|
||||||
// Date : 08/2012
|
// Date : 08/2013
|
||||||
// Version : 0.2
|
// Version : 0.3
|
||||||
// Dépendance : Postifx
|
// Dépendance : Postifx
|
||||||
//-----------------------------------------------------------
|
//-----------------------------------------------------------
|
||||||
|
|
||||||
include_once('./conf.php');
|
include_once('./conf.php');
|
||||||
|
|
||||||
# Init
|
# Init & vérif
|
||||||
if (!is_writable(FICHIERALIAS)) {
|
if (!is_writable(FICHIERALIAS)) {
|
||||||
exit('<div class="highlight-1">Erreur : le fichier d\'alias ('.FICHIERALIAS.') 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>');
|
||||||
|
}
|
||||||
|
if (defined('BLACKLIST') && !is_readable(BLACKLIST)) {
|
||||||
|
exit('<div class="highlight-1">Erreur : un fichier de blacklist est renseigné mais n\'est pas lisible. Merci de contacter l\'administrateur</div>');
|
||||||
|
}
|
||||||
|
if (defined('ALIASDENY') && !is_readable(ALIASDENY)) {
|
||||||
|
exit('<div class="highlight-1">Erreur : un fichier d\'alias interdit est renseigné mais n\'est pas lisible. Merci de contacter l\'administrateur</div>');
|
||||||
}
|
}
|
||||||
|
|
||||||
function VerifMXemail($email) {
|
function VerifMXemail($email) {
|
||||||
|
@ -49,8 +55,57 @@ function SupprimerAlias($alias,$email) {
|
||||||
UpdateVirtualDB();
|
UpdateVirtualDB();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
function BlacklistEmail($email) {
|
||||||
|
if (defined('BLACKLIST')) {
|
||||||
|
return parseFileRegex(BLACKLIST, $email);
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function AliasDeny($alias) {
|
||||||
|
if (defined('ALIASDENY')) {
|
||||||
|
return parseFileRegex(ALIASDENY, $alias);
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function ListeAlias($email) {
|
||||||
|
$handle = fopen(FICHIERALIAS, 'r');
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
if (DEBUG) {
|
if (DEBUG) {
|
||||||
echo '<div class="highlight-2">Debug activé</div>';
|
echo '<div class="highlight-2">Debug activé</div>';
|
||||||
|
print_r($_REQUEST);
|
||||||
}
|
}
|
||||||
|
|
||||||
echo '<h1>Emails poubelle libre</h1>
|
echo '<h1>Emails poubelle libre</h1>
|
||||||
|
@ -59,8 +114,8 @@ echo '<h1>Emails poubelle libre</h1>
|
||||||
if (isset($_REQUEST['Validemail'])) {
|
if (isset($_REQUEST['Validemail'])) {
|
||||||
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)) {
|
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)) {
|
||||||
$data=explode(' ', $res[0]);
|
$data=explode(' ', $res[0]);
|
||||||
$aliasZici=explode('@', $data[1]);
|
$aliasExplode=explode('@', $data[1]);
|
||||||
$alias=$aliasZici[0];
|
$alias=$aliasExplode[0];
|
||||||
$email=$data[2];
|
$email=$data[2];
|
||||||
SupprimerAlias($alias,$email);
|
SupprimerAlias($alias,$email);
|
||||||
AjouterAlias($alias,$email);
|
AjouterAlias($alias,$email);
|
||||||
|
@ -68,7 +123,33 @@ if (isset($_REQUEST['Validemail'])) {
|
||||||
} else {
|
} else {
|
||||||
echo '<div class="highlight-1">Erreur : ID introuvable</div>';
|
echo '<div class="highlight-1">Erreur : ID introuvable</div>';
|
||||||
}
|
}
|
||||||
} else if (isset($_REQUEST['email']) && isset($_REQUEST['alias'])) {
|
} elseif (isset($_REQUEST['list'])) {
|
||||||
|
$email=strtolower($_REQUEST['email']);
|
||||||
|
if (! filter_var($email, FILTER_VALIDATE_EMAIL)) {
|
||||||
|
echo '<div class="highlight-1">Erreur : Adresse email incorrect</div>';
|
||||||
|
} else if (! VerifMXemail($email)) {
|
||||||
|
echo '<div class="highlight-1">Erreur : Adresse email incorrect (2)</div>';
|
||||||
|
} 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>';
|
||||||
|
} else {
|
||||||
|
# Envoi de l'email récapitulatif :
|
||||||
|
if (!preg_match('#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#', $email)) {
|
||||||
|
$passage_ligne = "\r\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) {
|
||||||
|
$message.=' * '.$alias.$passage_ligne;
|
||||||
|
}
|
||||||
|
$message.= 'Pour supprimer un email poubelle vous pouvez vous rendre sur le lien ci-dessou : '.$passage_ligne;
|
||||||
|
$message.= "\t * ".URLPAGE.$passage_ligne;
|
||||||
|
mail($email,EMAIL_SUJET_LISTE,$message,$header);
|
||||||
|
echo '<div class="highlight-3">Un email vous a été adressé avec la liste de vos emails poubelles actifs.</div>';
|
||||||
|
}
|
||||||
|
} elseif (isset($_REQUEST['email']) && isset($_REQUEST['alias'])) {
|
||||||
$alias=strtolower($_REQUEST['alias']);
|
$alias=strtolower($_REQUEST['alias']);
|
||||||
$email=strtolower($_REQUEST['email']);
|
$email=strtolower($_REQUEST['email']);
|
||||||
if (! filter_var($email, FILTER_VALIDATE_EMAIL)) {
|
if (! filter_var($email, FILTER_VALIDATE_EMAIL)) {
|
||||||
|
@ -77,10 +158,12 @@ if (isset($_REQUEST['Validemail'])) {
|
||||||
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 : email poubelle incorrect</div>';
|
||||||
} else if (in_array($alias, $aliasInterditListe)) {
|
} 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)) {
|
||||||
|
echo '<div class="highlight-1">Erreur : vous avez été blacklisté sur ce service</div>';
|
||||||
} elseif (isset($_REQUEST['ajo'])) {
|
} elseif (isset($_REQUEST['ajo'])) {
|
||||||
if (preg_match('#\n'.$alias.'@'.DOMAIN.'#', file_get_contents(FICHIERALIAS)) || preg_match('#\n\#[0-9]+ '.$alias.'@'.DOMAIN.'#', file_get_contents(FICHIERALIAS))) {
|
if (preg_match('#\n'.$alias.'@'.DOMAIN.'#', file_get_contents(FICHIERALIAS)) || preg_match('#\n\#[0-9]+ '.$alias.'@'.DOMAIN.'#', file_get_contents(FICHIERALIAS))) {
|
||||||
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 (preg_match('#\n[a-z0-9]+@'.DOMAIN.' '.$email.'#', file_get_contents(FICHIERALIAS))) {
|
||||||
|
@ -112,7 +195,7 @@ if (isset($_REQUEST['Validemail'])) {
|
||||||
} else {
|
} else {
|
||||||
$message.= "\t * ".URLPAGE.'?sup=true&email='.$email.'&alias='.$alias.$passage_ligne;
|
$message.= "\t * ".URLPAGE.'?sup=true&email='.$email.'&alias='.$alias.$passage_ligne;
|
||||||
}
|
}
|
||||||
mail($email,EMAIL_SUJET.$alias,$message,$header);
|
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>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -131,9 +214,9 @@ if (isset($_REQUEST['Validemail'])) {
|
||||||
<input type="text" name="alias" size="24" border="0" /> @<?= DOMAIN; ?>
|
<input type="text" name="alias" size="24" border="0" /> @<?= DOMAIN; ?>
|
||||||
<br />
|
<br />
|
||||||
<label>Votre email réel : </label>
|
<label>Votre email réel : </label>
|
||||||
<input type="text" name="email" size="24" border="0" />
|
<input type="text" name="email" size="24" border="0" /> <input class="button" type="submit" name="list" value="Lister" />
|
||||||
<br />
|
<br />
|
||||||
<input class="button" type="submit" name="ajo" value="Créer" /> ou
|
<input class="button" type="submit" name="ajo" value="Créer" /> ou
|
||||||
<input class="button" type="submit" name="sup" value="Supprimer" /> la redirection poubelle
|
<input class="button" type="submit" name="sup" value="Supprimer" /> la redirection poubelle
|
||||||
</form>
|
</form>
|
||||||
<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>
|
||||||
|
|
Loading…
Reference in a new issue