Originariamente inviato da KolduS
Questo script è completamente sbagliato dal punto di vista semantico.
e poi per farla molto più facile dovresti dividere la query a blocchi da 50 in modo che tutto il lavoro lo fai fare al SQL e tu in fase di programmazione te ne sbatti.
codice:
$blocco = 50;
// imposti gli header il testo e l'oggetto e il destinatario che sarà il tuo indirizzo stesso
$destinatario = "tuoindirizzo@email.it";
$header1 = "From: Inviante <inviante@dominio.org>\r\n";
$header2 = "X-Mailer: Il nostro Php\r\n";
// costruiamo le intestazioni specifiche per il formato HTML
$header2 .= "MIME-Version: 1.0\r\n";
$header2 .= "Content-Type: text/html; charset=\"iso-8859-1\"\r\n";
// il charset ovviamente è quello che vuoi te
$header2 .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
$oggetto = "oggetto del messaggio";
$messaggio = "testo del messaggio vero e proprio";
$email = true;
$contatore = 0;
while($email)
{
$query = mysql_query("SELECT id,mail FROM mail_list LIMIT ".($contatore * $blocco).", $blocco");
if (mysql_num_rows($query))
{
unset($header);
for ($i = 0; $i < mysql_num_rows($query); $i++)
{
$row = mysql_fetch_array($query);
// mettiamo nell'header tutti i riceventi
$header .= "Bcc: <". $row['id'] .">\r\n";
}
// inviamo la mail
mail($destinatario, $oggetto, $testo, $header1.$header.$header2);
$contatore++;
}
else
$email = false;
}
purtroppo anche questo script scritto al volo (quindi ci potrebbe essere qualche errore visto che non l'ho provato...) può risultare scomodo.
io non so quante email tu debba inviare, ma se questo prende un tempo troppo lungo e supera i 3 minuti (impostazione di default del php) la pagina scade, a te compare una pagina bianca e non sai dove è rimasto ad inviare.
anche impostando questo tempo maggiore avresti una rottura di scatole infinita. la cosa migliore è far girare questo script in background sulla macchina.
Cerco di spiegare come ho fatto la mia newsletter che è in grado di mandare un numero al più infinito di email:
io invio i dati alla pagina1.php, questa attraverso una richiesta POST invia i dati (dopo averli verificati) ad una seconda pagina che chiameremo invio.php. Questa pagina ovviamente fa il controllo che la richiesta venga dalla macchina stessa (e non da un ip esterno) e in caso contrario non prosegue per evitare che altri possano inviare email. a questo punto forso la chiusura di pagina1.php che mi mostra a video che l'invio è iniziato correttamente. nel frattempo alla pagina invio.php ho settato di non terminare mai (attraverso set_time_limit(0)

, in questo modo questa continua ad essere eseguita nonostante non ci sia più nessuno che la richiede.
La pagina invio.php cicla tutti gli utenti della newsletter, e invia una mail alla volta a intervalli di un secondo (per non impallare la macchina) in modo tale che sulla mail siano personalizzabili nome e cognome. a questo punto il suo stato viene continuamente registrato su una tabella php e mostrato da una terza pagina status.php che mi mostra in tempo reale lo stato di avanzamento della newsletter.
in ultimo sulla pagina status.php deve essere possibile impostare un campo sul mysql in modo tale che se impostato in una certa maniera la pagina invio.php che costantemente lo monitora si blocca e smette di inviare.
Spero che ti sia stato di aiuto.
Buon Lavoro