Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di Tr|k`Tr4k
    Registrato dal
    Jul 2002
    Messaggi
    2,766

    Script per invio newsletter

    Salve
    ho uno script che invia newsletter agli utenti registrati al sito, pero' noto che essendo circa 3000 dopo un po' va in time out e quindi non spedisce le email.

    Queste email le invio da locale tramite smtp e non con la funzione mail()

    Qualcuno saprebbe dirmi come fare per non fare andare in time out il tutto?

    Questo e' quello che utilizzo ora:

    Codice PHP:
    <?php
    set_time_limit
    (0);
    require(
    "class.phpmailer.php");
    $messaggio stripslashes($messaggio);

    $host "";
    $db_nome "";
    $db_user "";
    $db_pass "";
    $nome_tabella "email";
    $connessione =  @mysql_connect("$host","$db_user","$db_pass")
    or die(
    "Impossibile stabilire una connessione locale.");
    $db = @mysql_select_db($db_nome$connessione)
    or die(
    "Impossibile selezionare il database.");
    $sql "select * from $nome_tabella order by id asc";
    $risultato = @mysql_query($sql,$connessione)
    or die(
    "Impossibile eseguire l'interrogazione.");
    while (
    $riga mysql_fetch_assoc($risultato)) {
    $id $riga['id'];
    $email $riga['email'];

    //PORTO I CAMPI DELLE VARIABILI DALLA PAGINA DEL MODULO A QUESTA CHE LI INVIA TRAMITE EMAIL
    $oggetto=$_POST['oggetto'];
    $messaggio=$_POST['messaggio'];
    $allegato=$_POST['allegato'];



    $mail = new PHPMailer();

    $mail->From     "info@miosito.it"// indirizzo di provenienza
    $mail->FromName "Mio Nome";  // nome utente
    $mail->Subject   "$oggetto"// Preparo l'oggetto dell'email prendendolo dal campo $oggetto
    $mail->Host     "smtp.aruba.it"// server smtp
    $mail->Mailer   "smtp"// dice a php mailer di usare smtp invece della funzione mail




    //SCRIVO IL MESSAGGIO CHE DEVE COMPARIRE NELLA EMAIL
    $messaggio="<html><body>$messaggio</body></html>";




    // AGGIUNGO LA VARIABILE MESSAGGIO A CHI POTRA' LEGGERE LE EMAIL IN HTML
    $body  "$messaggio";
    // AGGIUNGO LA VARIABILE MESSAGGIO PER CHI NON POTRA' LEGGERE LE EMAIL IN HTML
    $text_body  "$messaggio";
    $mail->Body    $body;
    $mail->AltBody $text_body;
    $mail->AddAddress("$email");
    if(!
    $mail->Send())
    echo 
    "ERRORE NELL INVIO DELLA EMAIL";
    // Pulizia per eventuali altri invii successivi
    $mail->ClearAddresses();
    $mail->ClearAttachments();
    }
    ?>
    Vorrei inoltre far si che ad ogni invio mi compaia a video l'indirizzo dell'email a cui e' stato inviata l'email mentre ora mi esce solo alla fine, quando ho inviato il tutto

  2. #2
    Utente di HTML.it L'avatar di Webmaster76
    Registrato dal
    Mar 2001
    residenza
    Torino
    Messaggi
    298
    Ti conviene mandare solo tot mail alla volta, limitando la query con il llimit. Un refresh automatico alla pagina di invio proseguirà dall'ultimo valore inviato (memorizzando questo "puntatore" nel database e richiamandolo quando viene caricata la pagina). In questo modo puoi anche sospendere l'invio e proseguire in un secondo momento l'invio delle mail... o fermarsi in caso di errore nell'invio ecc ecc ecc

    Questo è solo il principio, è semplice e garantisce di poter spedire un numero praticamente illimitato di mail... lo uso da tempo e non ho mai avuto problemi...

  3. #3
    Utente di HTML.it L'avatar di Tr|k`Tr4k
    Registrato dal
    Jul 2002
    Messaggi
    2,766
    Originariamente inviato da Webmaster76
    Ti conviene mandare solo tot mail alla volta, limitando la query con il llimit. Un refresh automatico alla pagina di invio proseguirà dall'ultimo valore inviato (memorizzando questo "puntatore" nel database e richiamandolo quando viene caricata la pagina). In questo modo puoi anche sospendere l'invio e proseguire in un secondo momento l'invio delle mail... o fermarsi in caso di errore nell'invio ecc ecc ecc

    Questo è solo il principio, è semplice e garantisce di poter spedire un numero praticamente illimitato di mail... lo uso da tempo e non ho mai avuto problemi...
    Scusa in che modo posso fare l'invio di tot email alla volta?
    So cos'e' il limit ma non so come intendi utilizzarlo.

    Forse vuoi fare qualcosa tipo:

    invia_email.php invia le email da 0 a 10
    finite queste dieci, passa a invia_email_2.php che invia da 10 a 20
    finite queste, passa a invia_email_3.php che invia da 20 a 30
    e cosi' via?
    Oppure e' gestibile tutto da una sola pagina e con una sola query?

  4. #4
    Utente di HTML.it L'avatar di Webmaster76
    Registrato dal
    Mar 2001
    residenza
    Torino
    Messaggi
    298
    Originariamente inviato da Tr|k`Tr4k
    Scusa in che modo posso fare l'invio di tot email alla volta?
    So cos'e' il limit ma non so come intendi utilizzarlo.

    Forse vuoi fare qualcosa tipo:

    invia_email.php invia le email da 0 a 10
    finite queste dieci, passa a invia_email_2.php che invia da 10 a 20
    finite queste, passa a invia_email_3.php che invia da 20 a 30
    e cosi' via?
    Oppure e' gestibile tutto da una sola pagina e con una sola query?
    Non ti conviene gestire tramite 1 sola query... andrebbe in timout lo stesso... meglio richiamare una pagina che si auto aggiorna passato che ne so, 1 secondo dalla sua generazione....

    "LIMIT 0,10" = Record iniziale 0, restutuisce i primi 10 record;
    "LIMIT 10,10" = Record iniziale 10, restutuisce i prossimi 10 record;
    "LIMIT 20,10" = Record iniziale 20, restutuisce i prossimi 10 record;

    Il file php da richiamare è sempre lo stesso, invia_email.php

    il valore 0,10,20 ecc ecc lo puoi passare come $_GET oppure ancora meglio inserire nel database aggiornando un campo INT ad ogni invio.




  5. #5
    Utente di HTML.it L'avatar di Tr|k`Tr4k
    Registrato dal
    Jul 2002
    Messaggi
    2,766
    Originariamente inviato da Webmaster76
    Non ti conviene gestire tramite 1 sola query... andrebbe in timout lo stesso... meglio richiamare una pagina che si auto aggiorna passato che ne so, 1 secondo dalla sua generazione....

    "LIMIT 0,10" = Record iniziale 0, restutuisce i primi 10 record;
    "LIMIT 10,10" = Record iniziale 10, restutuisce i prossimi 10 record;
    "LIMIT 20,10" = Record iniziale 20, restutuisce i prossimi 10 record;

    Il file php da richiamare è sempre lo stesso, invia_email.php

    il valore 0,10,20 ecc ecc lo puoi passare come $_GET oppure ancora meglio inserire nel database aggiornando un campo INT ad ogni invio.



    Si ok, ma quindi come faccio a fare il limit per tutte le volte?
    mica cosi':
    $sql = "select * from $nome_tabella order by id asc LIMIT 0,10, LIMIT 10,20, LIMIT 20,30";
    $risultato = @mysql_query($sql,$connessione)

    ecc?

  6. #6
    Utente di HTML.it L'avatar di Webmaster76
    Registrato dal
    Mar 2001
    residenza
    Torino
    Messaggi
    298
    Originariamente inviato da Tr|k`Tr4k
    Si ok, ma quindi come faccio a fare il limit per tutte le volte?
    mica cosi':
    $sql = "select * from $nome_tabella order by id asc LIMIT 0,10, LIMIT 10,20, LIMIT 20,30";
    $risultato = @mysql_query($sql,$connessione)

    ecc?
    Mannò! lo metti in una variabile (ad esempio $start):

    $sql = "select * from $nome_tabella order by id asc LIMIT ".$start.",10";

    poi incrementi la variabile $start e passi il valore...

  7. #7
    Utente di HTML.it L'avatar di Tr|k`Tr4k
    Registrato dal
    Jul 2002
    Messaggi
    2,766
    Originariamente inviato da Webmaster76
    Mannò! lo metti in una variabile (ad esempio $start):

    $sql = "select * from $nome_tabella order by id asc LIMIT ".$start.",10";

    poi incrementi la variabile $start e passi il valore...
    Scusa, ma non ho capito
    Non e' che mi puoi postare un esempio usando il mio codice?

  8. #8
    Utente di HTML.it L'avatar di Tr|k`Tr4k
    Registrato dal
    Jul 2002
    Messaggi
    2,766
    up

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.