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&agrave; 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 &egrave; stato azzerato. Il sistema &egrave; 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!!!!!!!!