Newsgroup: it.comp.www.php
Titolo: invio email e loop

Ciao so che l'argomento è stato trattato molte volte ma nei precedenti post
non ho trovato una soluzione.
Devo inviare circa 500 email al giorno con messaggi personalizzati. Per
questo mi servo di mysql e del ciclo while nel quale inserisco anche
l'istruzione mail().
Il problema è che già alla quarta/quinta email l'operazione si blocca e
incorro nel timeout del server.
Come posso risolvere il problema considerando che non posso installare
nessuna utility nello spazio web?

 incorro nel timeout del server.
Sicuramente, quando si fanno queste cose, è bene fare un file con i log
degli invii, in modo da non rispedire eventualmente le e-mail n volte.
Se non ti funziona con set_time_limit(0) potresti fare una pagina che legge
gli indirizzi da un file, controlla da un'altro file se non gli sia già
stata mandata, e ne manda un tot (diciamo 4, nel tuo caso). Fatto questo fa
il refresh su se stessa, che prosegue dunque con l'invio agli altri
indirizzi. Forse 4 alla volta non sono granchè (ma per mandare 4 e-mail
quanto ti ci mette??? in genere il timeout è a 30 secondi...), ma se non
riesci a liberati del timeout è un problema.
Ludovico

 incorro nel timeout del server.
Spezza l'elaborazione.
Nella query che recupera i dati dal db inserisci una clausola LIMIT in modo
da recuperare soltanto 3/4 record a partire da un offset (che parte da 0).
Poi fai il ciclo while su questi record.
Al termine richiami la pagina passandogli un offset progressivo.
Volendo puoi anche recuperare un record alla volta anzichè 3/4.
Ciao
Marco

 ha scritto nel messaggio
news:IMAfb.9353$e6.3...@twister2.libero.it...

Io ho risolto utilizzando l'smtp del mio e di altri server ! comunque ho un
applicazione sviluppata qualche tempo fa ... e oltre ad aver applicato la
tecnica elencata da marco ... ovvero facevo dei mini cicli prendendo
pacchetti da 50mail inserivo dopo il comando mail uno sleep di 20 secondi
[sleep(20)] in modo da dare al server la possibilità di liberarsi anche se
parzialmente delle code.. !
All'inizio dell' invio il Categorico flush() e ovviamente creavo un array
contenente le mail prese da db !
Per 500 mail era ok ! quando mi sono trovato a fare i conti con 20.000 mail
.. fortunatamente non ho seguito qualche consiglio datomi (inserire 19.999
mail in BCC) ! ma ho installato apache che girava come CGI e lanciando il
file php da riga di comando va una scheggia! mi libero di 2000 email in 2
minuti !
-- 
::: SALUTI ::::
-------------------------------------------------
Web:  
www.froid.it
mail: 
in...@froid.it
------------------------------------------------

 pacchetti da 50mail inserivo dopo il comando mail uno sleep di 20 secondi
rettifico.. mi sono accorto di una mega CAgata... dopo l'invio di 50 mail ..
prima di ricaricare il nuovo arrai con un altro pacchetto , inserivo lo
sleep ! :)


 contenente le mail prese da db !
qual'è il vantaggio di mettere i dati del db in un array  rispetto all'uso
di "mysql_fetch_array()" L'istruzione
     $query=mysql_query(SELEC ...)
non ricava i dati in un solo passaggio interrogando insomma il db una sola
volta?
Grazie!

 ha scritto nel messaggio
news:W2Sfb.11151$e6.3...@twister2.libero.it...

Faccio un Array da (in questo caso vi ho detto 50) 50 unità !  fatto tutto
da una funzione .. mi restituisce le email impacchettate e pronte da
riutilizzare!


 >      $query=mysql_query(SELEC ...)
la funzione mysql_fetch_array() restituisce l'array associativo della n-upla
del database che si sta querando !
quindi comunque lo interroghi + volte ! solo che io mi impacchetto le mail
con mysql_fetch_assoc() e sono apposto !
