Appunto! Funziona tutto. Non nascondo la mia gioia, anzi!
Però forse sarebbe meglio adottare una tattica più "conservatrice": il mio script manda 25 email a ogni refresh; forse sarebbe meglio mandarne solo 20. Ma ci vuole poco a cambiare. Se qualcuno fosse interessato, scriverò appena avrò un attimo di tempo copierò sul forum il codice essenziale delle tre pagine implicate nell'invio con i dovuti commenti. A presto.
EDIT: Ecco il codice usato. Ci sono tre files: finale.php, invio.php e inviofinito.php.
Codice PHP:
<!-- File: finale.php -->
<form action="invio.php" method="post">
<input type="hidden" name="testo" value='<? print $integrale; ?>'>
<input type="hidden" name="titolo" value='<? print $titolo; ?>'>
<input type="submit" name="azione" value="Invia">
</form>
Ovviamente, in questo file sono già state impostate alcune variabili, che sono $testo, col testo da inviare e $titolo con il titolo, che sarà poi integrato nell'oggetto dell'email.
Codice PHP:
<?
//File: invio.php
session_start();
include("../config.inc.php");
$db = connetti();
if($_POST['azione'] == 'Invia'){
//Imposto le variabili di sessione per l'invio delle mail
$_SESSION['mail'] = array(
'i' => 0,
'titolo' => $_POST['titolo'],
'testo' => $_POST['testo'],
'azione' => 'invio',
'ok' => array(),
'ko' => array()
);
die ('<meta http-equiv="refresh" content="0">');
}
if($_SESSION['mail']['azione'] == 'invio'){
//Invio di un blocco di 25 mail
$i = $_SESSION['mail']['i'];
$query = "SELECT * FROM newsletter_registrati LIMIT $i,25";
$result = mysql_query ($query, $db);
$num_rows = mysql_num_rows($result);
if($num_rows == 0){
$_SESSION['mail']['azione'] = 'finito';
die ('<meta http-equiv="refresh" content="0;URL=inviofinito.php">');
}
while ($row = mysql_fetch_array($result)){
//mail(a, oggetto, testo, headers)
$a = $row['email'];
$oggetto = "[Newsletter lilu1] - " . $_SESSION['invio']['titolo'];
$testo = $_SESSION['testo'];
$da = "From: Liceo di Lugano 1 <lilu1@altervista.org>";
$headers_mail = scrivi_header($da);
if(mail($a, $oggetto, $testo, $headers_mail))
$_SESSION['mail']['ok'][] = $a;
else
$_SESSION['mail']['ko'][] = $a;
$i++;
sleep(2);
}
if($num_rows < 25){
$_SESSION['mail']['azione'] = 'finito';
die ('<meta http-equiv="refresh" content="0;URL=inviofinito.php">');
}else{
$_SESSION['mail']['azione'] = 'invio';
die('<meta http-equiv="refresh" content="0">');
}
}
?>
In questo file ci sono due funzioni che sono definite nel file config.inc.php, che sono connetti(), che si connette al database e sceglie il database my_lilu1 e scrivi_header(), che, dato il mittente dell'email, restituisce una stringa contenente anche gli headers per l'invio in HTML.
Codice PHP:
<?
//File: inviofinito.php
session_start();
include("../config.inc.php");
$login = controllo_login('crealogin');
$db = connetti();
if($_SESSION['mail']['azione'] != 'finito'){
die ("Che cacchio ci fai qui?");
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html lang="it-ch">
<head>
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
<title>Sezione riservata</title>
</head>
<body>
<?
//Visualizzo il contenuto della variabile mail di sessione
echo "<!--\n\n";
print_r($_SESSION['mail']);
echo "\n\n-->";
//Visualizzazione del contenuto completata
?>
<?
//Visualizzo il rapporto sulle email mandate
$ok = $_SESSION['mail']['ok'];
$ko = $_SESSION['mail']['ko'];
echo "<p>";
foreach ($ok as $num => $email){
echo $num . " - Mail inviata correttamente a: " . $email . "<br>\n";
}
echo "</p><p>";
foreach ($ko as $num => $email){
echo $num . " - Problema nell'invio a: " . $email . "<br>\n";
}
echo "</p>";
//Finito il rapporto
?>
Quest'ultimo file visualizza il rapporto. Nel caso in cui la variabile di sessione $_SESSION['mail']['azione'] non valga "finito", significa che chi è arrivato in quella pagina non aveva nessun motivo per andarci, e quindi visualizzo un messaggio di errore ("Che cacchio ci fai qui?") ed esce.
Se qualcuno volesse avere altre informazioni o apportare correzioni, può postare qui.
FunCool: Non fare UP, usa il tasto Edita.