Ho realizzato uno script per la gestione di una newsletter. Una prima versione l'ho già creata e sembra funzionare ma volevo sottoporre alla vostra attenzione la parte che invia la newsletter per verificare eventuali errori. Il meccanismo è molto semplice. Ricevo da un'altra pagina l'id della newsletter da inviare e qui mi estraggo dal db il numero di utenti abilitati a ricevere la newsletter. A questo punto mi creo una sorta di paginazione automatica per non far andare la pagina in timeout che reindirizza automaticamente alla medesima pagina fino alla fine degli utenti. La fine la avrò al momento che la pagina attuale sarà uguale al totale delle pagine.
Ho già provato e sembra funzionare ma sicuramente qualcuno più esperto può aiutarmi. Volevo inoltre rendere la newsletter più flessibile sia nella creazione delle news che nella gestione di eventuali gruppi di utenti a cui inviare news personalizzate.
Inoltre è previsto l'inserimento in una tabella temporanea degli indirizzi mail per il quale si è verificato un errore e la news non è stata inviata.L'inizio dell'invio avviene alla pressione di un bottone e da li inizia il ciclo...
Una volta che ho finito volevo rendere lo script pubblico ma per renderlo pubblico voglio essere sicuro che funzioni.
grazie
Ho già provato e sembra funzionare ma sicuramente qualcuno più esperto può aiutarmi. Volevo inoltre rendere la newsletter più flessibile sia nella creazione delle news che nella gestione di eventuali gruppi di utenti a cui inviare news personalizzate.
Inoltre è previsto l'inserimento in una tabella temporanea degli indirizzi mail per il quale si è verificato un errore e la news non è stata inviata.L'inizio dell'invio avviene alla pressione di un bottone e da li inizia il ciclo...
Una volta che ho finito volevo rendere lo script pubblico ma per renderlo pubblico voglio essere sicuro che funzioni.
grazie
PHP:
<?php
require 'lib/controllo.php';
require 'lib/config.php';
$conn = @mysqli_connect($host, $user, $pass, $db) or die(mysqli_connect_error());
require "phpmailer/class.phpmailer.php";
//cambia metodo invio mail con phpmailer
if(!isset($_SESSION['ci']))
{
$_SESSION['ci']=0;
}
if(isset($_GET['close']))
{
unset($_SESSION['ci']);
$queryerrori="DELETE FROM t6587_newsletter_check_invio where ris_invio=1";
$risultatoerrori=mysqli_query($conn,$queryerrori);
header("location: newsletter.php");
}
//Inizio gestione paginazione
$nnewstemp=trim($_GET['nnews']);
$nnews=mysqli_real_escape_string($conn,$nnewstemp);
$i=0;
$numutentimax=3;
$querytot="select count(id) as tot from t6745_newsletter_utenti where stato=1 and attivata=1";
$risultatotot=mysqli_query($conn,$querytot);
$row = mysqli_fetch_assoc($risultatotot);
$utentitot=$row['tot'];
$numeropagine=ceil($utentitot/$numutentimax);
if(isset($_GET['gruppo']))
{
$pagina=$_GET['gruppo'];
}
else
{
$pagina=0;
}
if ($pagina>=1)
{
$paginasucc=$pagina+1;
$paginaprec=$pagina-1;
}
$ultimovisual=0;
if($pagina>=2)
{
for($y=1;$y<$pagina;$y++)
{
$ultimovisual=$ultimovisual+$numutentimax;
}
}
else
{
$ultimovisual=0;
}
if(isset($_GET['op']))
{
$querynews="select * from t6935_newsletter_inviate where id=$nnews";
$risultatonews=mysqli_query($conn,$querynews);
$rownews = mysqli_fetch_assoc($risultatonews);
$titolonews=$rownews['titolo'];
$testonews=$rownews['testo'];
$mexalto='
<html><body><head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
</head>
<body style="background-color:#DDDDDD;width:80%;margin:auto;">
<table width="100%">
<tr>
<td style="background:#096096;color:silver;font-weight:bold;font-size:16px;"> '.$titolonews.' - Newsletter </td>
</tr>
<tr>
<td align="left"><img width="400px" src="#" alt="logo"></td>
</tr>
<tr><td>
';
$mexmedio='
</tr>
<tr>
<br>
<td>
'.$testonews.'
</td>
</tr>
<tr>
<td>
<br>
<hr>
';
$mexbasso='<br>
</td>
<hr>
</tr>
<tr>
<td style="background:#096096;color:silver;font-weight:bold;font-size:16px;">
Footer
</td>
</tr>
</table>';
//estrazione utenti
$queryutenti="select * from t6745_newsletter_utenti where stato=1 and attivata=1 order by id desc limit $ultimovisual,$numutentimax";
$risultatoutenti=mysqli_query($conn,$queryutenti);
$numrighe=mysqli_num_rows($risultatoutenti);
while ($row = mysqli_fetch_assoc($risultatoutenti))
{
$messaggio = new PHPmailer();
//$messaggio->IsSMTP();
//settiamo su true il metodo che indica alla classe
//il formato HTML
$messaggio->IsHTML(true);
//$messaggio->Host='Host SMTP';
//intestazioni e corpo dell'email
$messaggio->From='[email protected]';
$messaggio->FromName='Newsletter ';
$messaggio->AddAddress($row['mail']);
$messaggio->AddReplyTo('[email protected]');
$messaggio->Subject="Newsletter - $titolonews";
//inseriamo i tag HTML e i CSS per formattare il messaggio
$messaggio->Body = ''.$mexalto.'';
$messaggio->Body .= '<small>Ricevi questa mail perchè sei iscritto/a alla newsletter<br>
Per informazioni scrivi a: [email protected]<br><a title="cancellati" href="#">Se non vuoi più ricevere informazioni clicca qui </a></small><br><br></td>';
$messaggio->Body .= ''.$mexmedio.'';
$messaggio->Body .= ''.$mexbasso.'';
$messaggio->Body .= '</body></html>';
//parte relativa all'invio
if(!$messaggio->Send())
{
$querycheck="insert into t6587_newsletter_check_invio (mail_utente,id_utente,ris_invio,newsletter_id) VALUES ('".$row['mail']."',".$row['id'].",0,$nnews)";
$risultatocheck=mysqli_query($conn,$querycheck);
}
else
{
if($pagina==$numeropagine )
{
//Qui quando si arriva alla fine esce e setta la newsletter come inviata
$querycheck="insert into t6587_newsletter_check_invio (mail_utente,id_utente,ris_invio,newsletter_id) VALUES ('".$row['mail']."',".$row['id'].",1,$nnews)";
$risultatocheck=mysqli_query($conn,$querycheck);
$_SESSION['ci']++;
$nnewstemp=trim($_GET['nnews']);
$nnews=mysqli_real_escape_string($conn,$nnewstemp);
$queryinsnews="update t6935_newsletter_inviate set inviata=1 where id=$nnews ";
$ricevutainsnews= mysqli_query($conn,$queryinsnews);
}
else
{
$querycheck="insert into t6587_newsletter_check_invio (mail_utente,id_utente,ris_invio,newsletter_id) VALUES ('".$row['mail']."',".$row['id'].",1,$nnews)";
$risultatocheck=mysqli_query($conn,$querycheck);
$_SESSION['ci']++;
header("location: invionewsletter.php?gruppo=$paginasucc&op=1&nnews=$nnews");
}
}
$messaggio->SmtpClose();
unset($messaggio);
unset($row);
}
}
?>