Ho modificato un pò tutto quanto...
Dal form invece di passare direttamente all'invio salvo tutto in una nuova tabella del database:
Codice PHP:
<?php
$intestazione="Resoconto salvataggio nel Database.";
$username=$_SESSION['username'];
$cartella=$_SERVER['DOCUMENT_ROOT']."/allegati_newsletter/";
//include ("config_db.inc.php");
// Recupero il valore dei campi del form
//$destinatario = $_POST['destinatario']; dal campo hidden per debug senza uso db
//$mittente = $_POST['mittente'];
$oggetto = $_POST['oggetto'];
$messaggio = $_POST['messaggio'];
// Valorizzo le variabili relative all'allegato
$allegato = $_FILES["allegato"]["tmp_name"];
$file_name = $_FILES["allegato"]["name"];
$allegato2 = $_FILES["allegato2"]["tmp_name"];
$file_name2 = $_FILES["allegato2"]["name"];
//SALVO GLI ALLEGATI SUL SERVER PER RECUPERARLI IN CASO DI ERRORI
if (move_uploaded_file($allegato, $cartella . $file_name))
{
$percorso_allegato=$cartella.$file_name;
print "
Upload primo file eseguito con successo
File salvato: ".$percorso_allegato."
</p>";
}
else { print "
Primo file non presente oppure si sono verificati dei problemi durante l'Upload
</p>"; }
if (move_uploaded_file($allegato2, $cartella . $file_name2))
{
$percorso_allegato2=$cartella.$file_name2;
print "
Upload secondo file eseguito con successo
File salvato: ".$percorso_allegato2."
</p>";
}
else { print "
Secondo file non presente oppure si sono verificati dei problemi durante l'Upload</p>"; }
//SALVO LA MAIL NEL DATABASE ARCHIVIO NEWSLETTER
$query_archivio="INSERT INTO archivio_newsletter (oggetto,messaggio,allegato,allegato2,stato,autore) VALUES ('$oggetto','$messaggio','$percorso_allegato','$percorso_allegato2', 0 ,'$username') ";
$salvataggio_db_archivio = mysql_query( $query_archivio , $db);
echo "
Newsletter salvata correttamente in archivio. Puoi procedere all'invio</p>";
?>
Ho creato poi la pagina in cui visualizzo tutte le newsletter in archivio. Se la newsletter non è stata inviata allora compare il link che richiama lo script per l'invio passando l'id della newsletter salvata in archivio:
Codice PHP:
<?php
//PARAMETRI
$mail_mittente="admin@localhost";
$nome_mittente="Newsletter con Allegati";
//CODICE INVIO
set_time_limit(0);
include ("config_db.inc.php");
require_once("class.phpmailer.php");
$id=$_GET['id'];
//LEGGO I DATI DA ARCHIVIO
$result = sql_recordset("SELECT * FROM archivio_newsletter where (stato='0' AND id=".$id.") ");
$oggetto=$result[0]['oggetto'];
$messaggio=$result[0]['messaggio'];
$percorso_allegato=$result[0]['allegato'];
$percorso_allegato2=$result[0]['allegato2'];
//CONTROLLO SE NON è GIà STATA INVIATA....
if (count($result)==0){echo "Newsletter già inviata oppure parametro non corretto";}
else {
$result = sql_recordset("SELECT * FROM iscritti_newsletter where (attivo='1' AND inviata='0') ");
$da_inviare=count($result);
echo "Mail da inviare:". $da_inviare."
";
// Invio la mail
$inviate=0;
for ($i=0; $i<count($result); $i++) {
$mail = new PHPMailer();
$mail->From = $mail_mittente;
$mail->FromName = $nome_mittente;
$mail->AddAddress($result[$i]['email']);
$mail->IsHTML(true);
$mail->Subject = $oggetto;
$mail->Body = $messaggio;
$mail->AltBody = $messaggio_txt;
//if (is_uploaded_file($allegato)){$mail->AddAttachment($allegato, $name = $file_name, $encoding = "base64", $type = "application/octet-stream");}
//if (is_uploaded_file($allegato2)){$mail->AddAttachment($allegato2, $name = $file_name2, $encoding = "base64", $type = "application/octet-stream");}
if (file_exists("$percorso_allegato")) {$mail->AddAttachment($percorso_allegato); }
if (file_exists("$percorso_allegato2")) {$mail->AddAttachment($percorso_allegato2); }
if(!$mail->Send()){
echo "Si è verificato un errore nell'invio della mail a ".$result[$i]['email']."
";
}else{
$update_flag = mysql_query("UPDATE iscritti_newsletter SET inviata = '1' WHERE id = '".$result[$i]['id']."';", $db);
echo "Inviata correttamente a: ".$result[$i]['email']."
";
$inviate=$inviate+1;
}
}
echo "
Inviate ".$inviate." di ".$da_inviare." e-mail.</p>";
if ($inviate==$da_inviare){
$azzero_stato_invio = mysql_query("UPDATE iscritti_newsletter SET inviata = '0';", $db);
$update_stato_db_newsletter = mysql_query("UPDATE archivio_newsletter SET stato = '1' WHERE id=".$id.";", $db);
echo "
Lo stato degli invii relativi agli iscritti è stato azzerato. Il sistema è pronto per monitorare il prossimo invio.</p>";
echo "
JOB DONE! Puoi chiudere questa finestra.
";
}
else {
echo ("
Invio parziale. Ripetere l'operazione e controllare che vada a buon fine</p>");
}
}
?>
Codice PHP:
$result = sql_recordset("SELECT * FROM iscritti_newsletter where (attivo='1' AND inviata='0') ");
Con questo mi richiamo gli utenti attivi e a cui non è stata inviata la mail, ad ogni invio provvedo a fare l'update dello stato dell'invio utente per utente.
In questo modo, in caso di interruzioni, richiamando lo script ricomincio da dove ero rimasto proprio seguendo il tuo consiglio!
L'unica vera modifica è che prima gli allegati erano al volo, adesso provvedo a salvarmi il percorso direttamente in database;
secondo ho tutto il corpo della mail, l'oggetto ecc ecc nel database e non disponibili con il post.
Questo perchè se per qualche strano motivo si chiudesse la pagina, i dati da dove li avrei potuti recuperare!!??!?
per il resto ci dovremmo essere finalmente!!!!!!!!! (a parte il cron o lo sleep che implementerò dopo aver testato sul server).
Altri consigli???
Grazieeeeee!!!!!!!!