PDA

View Full Version : Invio di una newsletter a più di 2100 indirizzi, come posso velocizzare?


Herod2k
03-11-2005, 02:27
Ragazzi su un sito che ho fatto, il database dove ci sono gli indirizzi e-mails è diventato più di 2100 records, il sito è in php e gira su apache su una macchina linux (ma non sono sicurissimo).
Il problema è questo per inviare l'email usao il codice seguente:
while ($email = mysql_fetch_row ($result))

{


@set_time_limit(0);

require_once 'smtp_mail.php';

$to = $email[1];

$from = "[email protected]";

$subject = $_POST['oggetto'];



$headers = "MIME-Version: 1.0\r\n".

"Content-type: text/html; charset=iso-8859-1\r\n".

"From: \"La Murrina\" <".$from.">\r\n".

"To: \"$to\" <".$to.">\r\n".

"Date: ".date("r")."\r\n".

"Subject: ".$subject."\r\n";

$message = $testo;



$response = smtp_mail($to, $subject, $message, $from, $headers);

$contatore++;

}
adesso non fate troppo caso al codice che non è proprio troppo pulito, per inviare un'email ci mette circa 3 secondi moltiplicate per 2100 avrete un invio di emails per paio di ore...

Qualcuno può suggerirmi un modo più veloce per fare una cosa simile, senza bloccare il sito? Il pannello rimane fermo sulla pagina in questione finché non finisce ed è parecchio scomodo, c'è almeno un modo per mandare in background il processo d'invio e-mails per continuare ad usare il pannello di amministrazione del sito?

E' molto importante, e qualunque aiuto è apprezzato.

H2K

thundershare
03-11-2005, 11:55
diciamo che pratichi tanti sprechi :) .
prima cosa ciò che è costante va fuori dal while e non devi ridefinirlo per ogni ciclo, inclusione del file compreso.
n°2) cosa fa la funzione smtp_mail? immagino che invii le mail allora mi chiedo perchè non usi direttamente la funzione mail di php?


require_once 'smtp_mail.php';// i file di inclusione di solito si mettono a inizio pagina
$from = "[email protected]";// costante lasciala fuori dal while
$subject = $_POST['oggetto'];// costante pure questa lasciala fuori dal while
$headers = "MIME-Version: 1.0\r\n".

"Content-type: text/html; charset=iso-8859-1\r\n".

"From: \"La Murrina\" <".$from.">\r\n".

"To: \"$to\" <".$to.">\r\n".

"Date: ".date("r")."\r\n".

"Subject: ".$subject."\r\n";//se usi la funzione mail diventa una costante fuori dal while

$message = $testo; // constante fuori dal while
while ($email = mysql_fetch_row ($result)) {

$to = $email[1];
mail($to, $subject, $message, $from, $headers);// usa direttamente mail di php oppure sarebbe meglio che tu avessi un servizio di mailing list sul tuo server contralla se l'ordine degli argomenti da passare è esatto
$contatore++;// sembra che non serva puoi anche toglierlo
}

Herod2k
03-11-2005, 13:13
diciamo che pratichi tanti sprechi :) .
prima cosa ciò che è costante va fuori dal while e non devi ridefinirlo per ogni ciclo, inclusione del file compreso.
n°2) cosa fa la funzione smtp_mail? immagino che invii le mail allora mi chiedo perchè non usi direttamente la funzione mail di php?


require_once 'smtp_mail.php';// i file di inclusione di solito si mettono a inizio pagina
$from = "[email protected]";// costante lasciala fuori dal while
$subject = $_POST['oggetto'];// costante pure questa lasciala fuori dal while
$headers = "MIME-Version: 1.0\r\n".

"Content-type: text/html; charset=iso-8859-1\r\n".

"From: \"La Murrina\" <".$from.">\r\n".

"To: \"$to\" <".$to.">\r\n".

"Date: ".date("r")."\r\n".

"Subject: ".$subject."\r\n";//se usi la funzione mail diventa una costante fuori dal while

$message = $testo; // constante fuori dal while
while ($email = mysql_fetch_row ($result)) {

$to = $email[1];
mail($to, $subject, $message, $from, $headers);// usa direttamente mail di php oppure sarebbe meglio che tu avessi un servizio di mailing list sul tuo server contralla se l'ordine degli argomenti da passare è esatto
$contatore++;// sembra che non serva puoi anche toglierlo
}

si ok, il pimo era chiaro, infatti questo lo posso sistemare, per il secondo punto invece sono obbligato , il server su cui sta appoggia il sito, probabilmente è settato male, e se non uso smtp_mail mi manda i dati sbagliati, in locale mail() di php mi funziona perfettamente, in remoto quando spedisce mi aggiunge dati in più all'e-mail e mi cambia il mittente e mi mette l'header nel corpo del testo, insomma un bel casino e quindi l'unica cosa che sono riuscito a fare è questa usare un smtp_mail

Comunque ho risolto, ho preso la parte del codice che mi interessava e l'ho messo in un'altro file e dal file principale lo richiamo così.

exec("php ./send.php > /dev/null 2>&1 &")

così l'utente che usa il pannello di gestione non si accorge del lavoro in atto.

Grazie lo stesso

H2K