newsletter.php:
[php]
<?PHP
/*****************
*****************/
require('config.php');
//Passaggio variabili
if(isset ($_POST['mail']))
{$mail=$_POST['mail'];}
if(isset ($_GET['ctrl']))
{$ctrl=$_GET['ctrl'];}
if(isset ($_GET['amministratore']))
{$amministratore=$_GET['amministratore'];}
if($ctrl==1)
{
//Verifica forma e-mail
$verifica_mail = ereg("^[^@ ]+@[^@ ]+.[^@ .]+$", $mail);
if(!$verifica_mail)
{echo "$err_mail";
if($amministratore==1)
{
echo " <br />
<script type="text/javascript">
<!--
function doRedirect() { //funzione con il link alla pagina che si desidera raggiungere
location.href = "gestione.php?operazione=3";
}
window.setTimeout("doRedirect()", 4000); //Fa partire il redirect dopo tot. secondi
//-->
</script>
Se entro 4 sencondi non vieni reindirizzato <a href="gestione.php?operazione=3">clicca qui</a>.<br />";
}
else
{ echo " <br />
<script type="text/javascript">
<!--
function doRedirect() { //funzione con il link alla pagina che si desidera raggiungere
location.href = "newsletter.php?ctrl=0";
}
window.setTimeout("doRedirect()", 4000); //Fa partire il redirect dopo tot. secondi
//-->
</script>
Se entro 4 secondi non vieni reindirizzato <a href="newsletter.php?ctrl=0">clicca qui</a>.";
}
exit();
}
//Verifica se esiste l'e-mail inserita dall'utente
include("$db_utenti"); //Includo utenti.php (o il nuovo nome del file di dati) perchè essendo una pagina contenente un array con tutte le e-mail scorro lo stesso per controllare se l'e-mail inserita non esiste.
$lunghezza_array=count($users); //Conto il numero delle e-mail presenti nell'array
$esiste=0;
$mail_utente_iscritto=$mail;
for($i=0; $i<$lunghezza_array; $i++)
{
$controllo=strcmp($mail,$users*);
if($controllo==0)
{
$esiste=1; //Se esiste assegno 1 alla variabile $esiste
}
}
if($esiste==1) //E-mail già esistente
{
echo "$err_mail_esistente";
if($amministratore==1)
{
echo " <br />
<script type=\"text/javascript\">
<!--
function doRedirect() { //funzione con il link alla pagina che si desidera raggiungere
location.href = \"gestione.php?operazione=3\";
}
window.setTimeout(\"doRedirect()\", 4000); //Fa partire il redirect dopo tot. secondi
//-->
</script>
Se entro 4 sencondi non vieni reindirizzato <a href=\"gestione.php?operazione=3\">clicca qui</a>.<br />";
}
else
{ echo " <br />
<script type=\"text/javascript\">
<!--
function doRedirect() { //funzione con il link alla pagina che si desidera raggiungere
location.href = \"newsletter.php?ctrl=0\";
}
window.setTimeout(\"doRedirect()\", 4000); //Fa partire il redirect dopo tot. secondi
//-->
</script>
Se entro 4 secondi non vieni reindirizzato <a href=\"newsletter.php?ctrl=0\">clicca qui</a>.";
}
}
else //E-mail non esistente nel file, procediamo alla registrazione dell'e-mail
{
//L'e-mail è salvata nella variabile $mail
$fp = fopen($db_utenti,"r+");
fseek($fp, -3,SEEK_END);
$stampa_completa="
$"."users[]=\"$mail\";
?>";
fputs($fp, $stampa_completa);
fclose($fp);
echo"$registrato_ok<br />";
if(isset ($notify_subscribed)) //Se la notifica è abilitata invia una mail con gli utenti registrati e l'ultimo utente registrato al servizio
{
//Invio notifica all'amministratore della newsletter con gli utenti attualmente registrati al servizio
$numero_utenti=count($users);
$oggetto="Utente iscritto dal servizio";
$header = "From: UPDATE: Newsletter $nome_sito <$home_page>\n";
// costruiamo le intestazioni specifiche per il formato HTML
$header .= "MIME-Version: 1.0\n";
$header .= "Content-Type: text/html; charset=\"iso-8859-1\"\n";
$header .= "Content-Transfer-Encoding: 7bit\n\n";
$messaggio="";
for($i=0; $i<$numero_utenti; $i++) //Inserisco dentro al testo del messaggio la lista degli utenti
{
$messaggio=$messaggio."<br />- $users*";
}
$messaggio=$messaggio."<br />- $mail_utente_iscritto";
$messaggio=$messaggio."<br /><br />Utente iscritto dal servizio: $mail_utente_iscritto"; //Scrivo l'ultimo utente che si è cancellato dal servizio
@mail($email_notify,$oggetto,$messaggio,$header); //Invio il messaggio all'amministratore
}
if($amministratore==1) //Se è l'amministratore che cancella l'e-mail deve essere rimandato alla sua pagina di amministrazione
{
echo "<br />
Se entro 4 secondi non vieni rimandato alla gestione newsletter
<a href="gestione.php">clicca qui</a><br />
<script type="text/javascript">
<!--
function doRedirect() { //funzione con il link alla pagina che si desidera raggiungere
location.href = "gestione.php";
}
window.setTimeout("doRedirect()", 4000); //Fa partire il redirect dopo tot. secondi
//-->
</script>";
}
else //Se è l'utente che si cancella ritorna all'home page
{
echo " <br />
<script type="text/javascript">
<!--
function doRedirect() { //funzione con il link alla pagina che si desidera raggiungere
location.href = "$home_page";
}
window.setTimeout("doRedirect()", 4000); //Fa partire il redirect dopo tot. secondi
//-->
</script>
Se entro 4 secondi non vieni reindirizzato alla home page <a href="$home_page">clicca qui</a>.<br />";
}
}
}
else if((!$ctrl)||($ctrl==0)) //Form di iscrizione
{
echo " <form name="new_email" action="newsletter.php?ctrl=1" method="post">
<table align="center">
<tr>
<td>
*e-mail
</td>
<td>
<input type=\"text\" size=\"30\" name=\"mail\">
</td>
</tr>
<tr>
<td colspan=\"2\">
<input type=\"submit\" value=\"Invia\" name=\"submit\">
</td>
</tr>
</table>
</form>";
}
?>
[/php]cancella.php:
[php]
<?PHP
/***************
***************/
require('config.php');
include("$db_utenti");
//Passaggio variabili
if(isset ($_GET['del']))
{$del=$_GET['del'];}
if(isset ($_GET['amministratore']))
{$amministratore=$_GET['amministratore'];}
//A seconda di chi cancella c'è un metodo di trasmissione dell'e-mail.
if(isset ($_POST['del_mail']))
{$del_mail=$_POST['del_mail'];}
else if(isset ($_GET['del_mail']))
{$del_mail=$_GET['del_mail'];}
if($del==1)
{
$lunghezza_array=count($users); //Conto il numero delle e-mail presenti nell'array
$esiste=0;
for($i=0; $i<$lunghezza_array; $i++)
{
$controllo=strcmp($del_mail,$users*);
if($controllo==0)
{
$esiste=1;
$posizione_array=$i; //La posizione dell'array da cancellare
}
}
if($esiste==0) //Se non esiste l'e-mail nel nostro file
{
echo"<br />$err_mail_inesistente<br />";
if($amministratore==1)
{
echo "
<script type=\"text/javascript\">
<!--
function doRedirect() { //funzione con il link alla pagina che si desidera raggiungere
location.href = \"gestione.php?operazione=3\";
}
window.setTimeout(\"doRedirect()\", 4000); //Fa partire il redirect dopo tot. secondi
//-->
</script>
Se non vieni reindirizzato alla gestione entro 4 secondi <a href=\"gestione.php?operazione=3\">clicca qui</a>.<br />";
}
else
{ echo "
<script type=\"text/javascript\">
<!--
function doRedirect() { //funzione con il link alla pagina che si desidera raggiungere
location.href = \"cancella.php\";
}
window.setTimeout(\"doRedirect()\", 4000); //Fa partire il redirect dopo tot. secondi
//-->
</script>
Se non vieni reindirizzato al form di cancellazione entro 4 secondi <a href=\"cancella.php\">clicca qui.</a>.<br />";
}
}
else //Se esiste cancella le due righe dell'e-mail dell'utente
{
$cancellare_mail="$"."users[]="$users[$posizione_array]";"; //Stringa mail da cancellare
$mail_utente_cancellato="$users[$posizione_array]";
$str="";
//Copio tutto il file dentro una variabile stringa
$fp=fopen($db_utenti, "r");
while (false !== ($c = fgetc($fp))) {
$str=$str."$c"; //Se si stampa $str non stampa nulla perchè il browser non legge i tag php
}
fclose($fp); //Chiudo il file
$str_aggiornato=str_replace("$cancellare_mail", "", $str); //Tolgo dalla stringa (che contiene l'intero file) l'e-mail da cancellare
$fp=fopen($db_utenti,"w"); //Riapro il file con gli utenti
fputs($fp, $str_aggiornato); //Riscrivo il nuovo file senza l'utente cancellato
fclose($fp); //Chiudo nuovamente il file
echo"<br />$delete_mail_confermato<br />";
if(isset ($notify_deleted)) //Se la notifica è abilitata invia una mail con gli utenti registrati e l'ultimo utente cancellato al servizio
{
//Invio notifica all'amministratore della newsletter con gli utenti attualmente registrati al servizio
$numero_utenti=count($users);
$oggetto="Utente cancellato dal servizio";
$header = "From: UPDATE: Newsletter $nome_sito <$home_page>\n";
// costruiamo le intestazioni specifiche per il formato HTML
$header .= "MIME-Version: 1.0\n";
$header .= "Content-Type: text/html; charset=\"iso-8859-1\"\n";
$header .= "Content-Transfer-Encoding: 7bit\n\n";
$messaggio="";
for($i=0; $i<$numero_utenti; $i++) //Inserisco dentro al testo del messaggio la lista degli utenti
{
if((strcmp($users*,$mail_utente_cancellato))!=0) // Se sono diverse ritorna un numero diverso da zero quindi copia tutti gli utenti tranne l'ultimo cancellato
{
$messaggio=$messaggio."<br />- $users*";
}
}
$messaggio=$messaggio."<br /><br />Ultimo utente cancellato dal servizio: $mail_utente_cancellato"; //Scrivo l'ultimo utente che si è cancellato dal servizio
@mail($email_notify,$oggetto,$messaggio,$header); //Invio il messaggio all'amministratore
}
if($amministratore==1) //Se è l'amministratore che cancella l'e-mail deve essere rimandato alla pagina di amministrazione
{
echo "<br />
Se entro 4 secondi non vieni rimandato alla gestione newsletter
<a href=\"gestione.php\">clicca qui</a><br />
<script type=\"text/javascript\">
<!--
function doRedirect() { //funzione con il link alla pagina che si desidera raggiungere
location.href = \"gestione.php\";
}
window.setTimeout(\"doRedirect()\", 4000); //Fa partire il redirect dopo tot. secondi
//-->
</script>";
}
else //Se è l'utente che si cancella ritorna alla home page
{
echo " <br />Se entro 4 secondi non vieni rimandato all'home page
<a href=\"$home_page\">clicca qui</a><br />
<script type=\"text/javascript\">
<!--
function doRedirect() { //funzione con il link alla pagina che si desidera raggiungere
location.href = \"$home_page\";
}
window.setTimeout(\"doRedirect()\", 4000); //Fa partire il redirect dopo tot. secondi
//-->
</script>";
}
}
}
else
{
echo"<br /><p align=center>$delete_mail<br /></p>";
echo "<form name="cancellati" action="cancella.php?del=1" method="post">
<table align="center">
<tr>
<td>
*e-mail
</td>
<td>
<input type=\"text\" size=\"30\" name=\"del_mail\">
</td>
</tr>
<tr>
<td colspan=\"2\">
<input type=\"submit\" value=\"Invia\" name=\"submit\">
</td>
</tr>
</table>
</form>";
}
?>
[/php]invio_newsletter.php:
[php]
<?PHP
/***********************
- invio_newsletter.php *
-
SCWD *
************************/
require('config.php');
include("$db_utenti");
if((!isset ($_SESSION['nickname']))&&(!isset ($_SESSION['password'])))// Se non si è loggati rimanda alla pagina di login
{
echo "Login non effettuato.
<!-- EFFETTUO UN REDIRECT ALLA PAGINA DI LOGIN -->
<script type="text/javascript">
<!--
function doRedirect() { //funzione con il link alla pagina che si desidera raggiungere
location.href = "login.php";
}
window.setTimeout("doRedirect()", 3000); //Fa partire il redirect dopo tot. secondi
//-->
</script>
<br />Se entro 3 secondi non vieni reindirizzato al form di login <a href="login.php">clicca qui</a>.<br />
";
exit();
}
//Passaggio variabili
if(isset ($_GET['step']))
{$step=$_GET['step'];}
if(isset ($_POST['testo']))
{
$testo=$_POST['testo'];
$_SESSION['testo']=$testo;
}
if(isset ($_POST['oggetto']))
{
$oggetto=$_POST['oggetto'];
$_SESSION['oggetto']=$oggetto;
}
if(isset ($_SESSION['testo']))
{$testo=$_SESSION['testo'];}
if(isset ($_SESSION['oggetto']))
{$oggetto=$_SESSION['oggetto'];}
if(($step==1)||(!$step))
{
echo "<br /><form name="invia_newsletter" action="invio_newsletter.php?step=2" method="post">
<table align="center">
<tr>
<td>
*Oggetto newsletter
</td>
<td>
<input type=\"text\" size=\"30\" name=\"oggetto\">
</td>
</tr>
<tr>
<td>
*Testo della newsletter<br />(Puoi utilizzare anche tag HTML)<br /><p align=justify><font size=2>Attenzione una volta premuto
INVIA<br /> ci vorrà del tempo per inviare tutte le e-mail.</font></p>
</td>
<td>
<textarea name=\"testo\" style=\"width: 400px; height: 200px\"></textarea>
</td>
</tr>
<tr>
<td colspan=\"2\">
<input type=\"submit\" value=\"Invia\" name=\"submit\">
</td>
</tr>
</table>
</form><br />";
}
//Verifica dei dati inseriti
else if($step==2)
{
if(($oggetto=="")||($testo==""))
{
echo"Si sono verificati i seguenti errori:<br />";
if($oggetto=="")
{
echo"<br />- Oggetto newsletter non inserito;";
}
if($testo=="")
{
echo"<br />- Testo newsletter non inserito;";
}
echo " <br />
<script type=\"text/javascript\">
<!--
function doRedirect() { //funzione con il link alla pagina che si desidera raggiungere
location.href = \"gestione.php\";
}
window.setTimeout(\"doRedirect()\", 4000); //Fa partire il redirect dopo tot. secondi
//-->
</script>
Se entro 4 secondi non vieni rimandato alla gestione <a href=\"gestione.php\">clicca qui</a>.<br />
";
}
else //Tutto ok
{
$numero_utenti=count($users); //Numero di utenti registrati alla newsletter
//Modifico il testo:
if(isset ($HTML_text_transform)) //Se settato sostuisce alcuni tra i più importanti caratteri speciali
{
$a_capo="\n";
$testo=str_replace($a_capo,'<br/>',$testo); /*Sostituisce gli "a capo" dati dall'invio della tastiera con <br /> nella stringa del testo;
per eseguire tale funzione bisogna settare $HTML_text_transform nel file di configurazione.
La funzione esiste ma non essendo sicuri che sostituisca anzichè con <br />, <br> meglio
auto-implementarla.*/
$testo=str_replace("\'",''',$testo); //Se trova un'apice la sostituisce con codice html
$testo=str_replace('\"','"',$testo); //Se trova le virgolette le sostituisce con codice html
$testo=str_replace('\\\\','\',$testo); //Se trova un backslash lo sostituisce con codice html
}
$header = "From: Newsletter $nome_sito <$email_notify>\n";
// costruiamo le intestazioni specifiche per il formato HTML
$header .= "MIME-Version: 1.0\n";
$header .= "Content-Type: text/html; charset=\"iso-8859-1\"\n";
$header .= "Content-Transfer-Encoding: 7bit\n\n";
$corpo="<br />
$testa_news
<br />
$testo<br />
<br />
<br />
$coda_news";
if(isset ($_GET['i_attuale']))
{
$i_attuale=$_GET['i_attuale'];
if($i_attuale>0)
{
if(!isset ($_GET['attesa']))
{
echo " <br />
<script type=\"text/javascript\">
<!--
function doRedirect() { //funzione con il link alla pagina che si desidera raggiungere
location.href = \"invio_newsletter.php?i_attuale=$i_attuale&step=2&attesa=1\";
}
window.setTimeout(\"doRedirect()\", 10000); //Fa partire il redirect dopo tot. secondi
//-->
</script>
Per evitare di mandare in blocco il sistema lo script è stato interrotto e riprenderà
tra 10 secondi. NON chiudere/aggiornare la pagina.<br /> Se non vieni reindirizzato entro 10 secondi
<a href=\"invio_newsletter.php?i_attuale=$i_attuale&step=2&attesa=1\">clicca qui</a>.<br />
";
exit();
}
}
else
{$i_attuale=0;}
}
else
{$i_attuale=0;}
$controllo_contatore=0;
for($i=$i_attuale; $i<$numero_utenti; $i++)
{
if( @mail($users*,$oggetto,$corpo,$header))
{
echo "<br /><font face=verdana size=2 color=blue><center>INVIATA - $users*.</center></font>";
}
else
{
echo "<br /><font face=verdana size=3 color=red><center>NON INVIATA - $users*</center></font>";
}
$controllo_contatore++;
if($controllo_contatore>49)
{
$i_attuale=$i+1;
echo " <br />
<script type=\"text/javascript\">
<!--
function doRedirect() { //funzione con il link alla pagina che si desidera raggiungere
location.href = \"invio_newsletter.php?i_attuale=$i_attuale&step=2\";
}
window.setTimeout(\"doRedirect()\", 2000); //Fa partire il redirect dopo tot. secondi
//-->
</script>
Per evitare di mandare in blocco il sistema lo script verrà interrotto e riprenderà
tra qualche secondo. NON chiudere/aggiornare la pagina. Se non vieni reindirizzato entro 2 secondi alla pagina di attesa
<a href=\"invio_newsletter.php?i_attuale=$i_attuale&step=2\">clicca qui</a>.<br />
";
exit();
}
}
echo"<br /><br /><a href=\"gestione.php\">Torna alla gestione</a><br /><br />";
$_SESSION['testo']="";
$_SESSION['oggetto']="";
}
}
?>
[/php]
Lo script è impostato per trasmettere le mail a gruppi di 50 per volta attendendo tra un gruppo di invio ed un altro 10 secondi, questo per evitare che il server che lo ospita possa bloccare l'esecuzione dello script.
Ovviamente è importante non chiudere la pagina fino ad esecuzione terminata.
Spendo due parole sul perché dell?utilizzo di un redirect in Javascript anziché un header in php:
semplicemente perché alcuni host non supportano la funzione header, per essere sicuri lo
faccio in Javascript.
Ovviamente il tutto non è graficamente composto, quindi può essere adattato nel modo in cui
pensate sia meglio farlo.
SCWD
Quì trovate il pacchetto zippato contenente i file.
E quì troverete una demo online per testare lo script.
Buon divertimento.