PDA

View Full Version : [PHP] Errore nella funzione mail


bouncey2k
04-11-2008, 15:30
Ciao a tutti.
Ho creato una newsletter in PHP che mi permette di mandare email prelevate da un database MySQL.
Le mail sono tante, diverse migliaia.

Per inviare l'email uso il seguente codice (tenendo conto del fatto che prima mi sono collegato al database):


while ($record = mysql_fetch_array ($select))

{

if ( mail ($record['mail'], $_POST['oggetto'], $corpo,

"From: Nome Cognome\r\n" .

"Reply-To: [email protected]\r\n" .

"Content-type: text/html; charset=utf-8\r\n")
)
{ echo "<p>{$record['mail']}: inviata</p>"; }
else
{ echo "<p>{$record['mail']}: fallita</p>"; }
}


Le email vengono correttamente inviate, ma intorno alla 2000ima email che invia, ricevo l'errore sottostante: quale può essere il problema?
Maximum execution time of 120 seconds exceeded

matteo micanti
04-11-2008, 17:06
Lo script va in timeout.
Io avrei gestito il problema in modo diverso: potresti costruire un array di indirizzi e-mail al quale aggiungere, per ogni record iterato, il valore del campo mail.
Dopodichè implodendo l'array formato usando la virgola come separatore passeresti il risultato al terzo parametro della funzione mail() come valore dell'header BCC o CC.
In questo modo invieresti tramite CCN o CC il messaggio a più indirizzi effettuando un'unica chiamata a mail() ed evitando il timeout.
Se non puoi sfruttare questa idea puoi invece gestire il tempo limite d'esecuzione attraverso la funzione set_time_limit() (http://it.php.net/set_time_limit), sempre che il safe-mode sia off e sia abilitata la detta funzione.
Se sei abilitato a gestire la configurazione di php puoi invece modificare direttamente il valore della direttiva max_execution_time nel file php.ini.
Altra soluzione è inviare un tot di e-mail per volta, magari usando cron (o un suo "emulatore") per suddividere il lavoro.
Ciao!
Matteo Micanti.