Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13

Discussione: Invio email a blocchi

  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    125

    Invio email a blocchi

    Buongiorno a tutti,

    sto cercando d'implemetare uno script che mi permetta d'inviare mail a blocchi di 50, prelevando gli indirizzi da una tabella del mio DB.

    Codice PHP:
    $db_selection mysql_select_db($nomedb$nome) or die ("Selezione del database fallita

    "
    );   
    // la tabella prova contiene un campo (inviato) settato a no per default
    $query "SELECT * FROM prova";   
    $result mysql_query ($query$nome) or die ("");   
    $contatore=0;   
    while (
    $riga mysql_fetch_row($result)) {  
    // ricavo l'id della tabella prova, contenente gli indirizzi dei miei iscritti     
    $id=$riga[0];       
    $inviato="si";       
    $contatore $contatore 1
    // la riga[2] corrisponde al campo inviato della tabella prova      
    if($contatore<=50 && $riga[2]=="no") {       
    $tipo_email "MIME-Version: 1.0\nContent-type: text/html; charset=utf-8";       
    $oggetto "E' solo una prova";       
    $destinatario "jyttjtjytjyjyyt@libero.it";       
    $headers "From: io <io@io.it>\n$tipo_email";       
    $headers .= "\r\nBcc: $riga[1]\r\n\r\n";       
    $headers .= "\r\nX-Mailer: PHP/" phpversion();       
    $messaggio "                  
    <html>                    
    <body>                      
    <table align=\"center\" width=\"600\" border=\"0\"bordercolor=\"#FF9900\">                        
    <tr>                          
    <td>                            
    <a href=\"http://www.io.it/io/io\" title=\"Il portale per personalizzare gli strumenti per io\" target=\"_blank\">                              
    <img src=\"http://127.0.0.1/altri/io/io/img/invio_news_img/pinguini.jpg\" border=\"0\"/>                            
    </a>                               
    </td>                        
    </tr>                      
    </table>                   
    </body>                  
    </html>                  "
    ;                             
    mail($destinatario$oggetto$messaggio$headers);       
    echo 
    "Email inviata a $riga[1]

    "

    // eseguo l'update della riga della tabella prova, in modo da far cambiare in si il valore del campo inviato      
    $query_uno "UPDATE prova SET inviato='$inviato' WHERE id='$id'";       
    $result mysql_query ($query_uno$nome); 
    } else {        
     break;       
    }    
    }    
    echo 
    "
    Invio di [b]
    $contatore[/b] email terminato con successo"?> 
    In realtà lo script invia una sola mail e poi mi da il seguente errore:

    Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource on line 1475

    Alla linea 1475 corrisponde il seguente codice: if($contatore<=50 && $riga[2]=="no")

    Per quel poco che capisco io, dunque è come se al secondo giro del ciclo while, la condizione if già noi sia più verificata; perchè?

    Grazie a tutti,
    Marco

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    Fai un var_dump di $riga oppure controlla il valore del campo


    ps: $contatore = $contatore + 1; ti basta $contatore += 1;

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    125
    Perona, a quale campo ti riferisci?

  4. #4
    Certo che se tu in un while dove usi $result, questo $result lo ridichiari,
    poi è ovvio che qualcosa si schianti!!!

    Codice PHP:

    while ($riga mysql_fetch_row($result)) { 

    ......

    if(
    $contatore<=50 && $riga[2]=="no") { 

    ......

    $result mysql_query ($query_uno$nome); //<----?????

    } else {        
     break;       
    }    


  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    125
    Hai ragione. Tante volte per una stupidaggine si diventa scemi.
    Grazie mille.
    Approfitto per un'altra cosa.
    Nell'<head> della pagina che esegue lo script, ho messo questo metatag:

    <META HTTP-EQUIV="Refresh" content="10;url=news_prova.php">

    L'idea è quella di far refreshare la pagina ogni 10 secondi e proseguire con l'invio delle mail a blocchi.
    Sarebbe più o meno così:
    La prima volta si esegue lo script che invia 50 mail e fa 50 update ul campo inviato della tabella prova, cambiando lo stato da no a si.
    La seconda volta, dopo il refresh, dovrebbero partire altre 50 mail, cominciando dalla 51 e finendo alla 100. In realtà la pagina refresha però non parte più nessuna mail.
    Sapresti dirmi dov'è che sto sbagliando per cortesia?

    Grazie,
    Marco

  6. #6
    Originariamente inviato da navajo75

    La seconda volta, dopo il refresh, dovrebbero partire altre 50 mail, cominciando dalla 51 e finendo alla 100. In realtà la pagina refresha però non parte più nessuna mail.
    Sapresti dirmi dov'è che sto sbagliando per cortesia?

    senza vedere il codice non saprei dire

    in ogni caso nel codice di prima togli il contatore e la if che non si possono vedere!!!!

    Codice PHP:
    //QUI PRENDI GIA' SOLO 50 RECORD CON INVIATO=NO
    $query "SELECT * FROM prova WHERE inviato='no' LIMIT 0,50";   
    //------------
    $result mysql_query ($query$nome
    or die (
    "query fallita"); //<--fatti dire qualcosa!!!   
    //$contatore=0;   NON SERVE +
    while ($riga mysql_fetch_row($result)) {  
    // ricavo l'id della tabella prova, contenente gli indirizzi dei miei iscritti     
    $id=$riga[0];       
    $inviato="si";       
    //$contatore = $contatore + 1;  NON SERVE + 
    // la riga[2] corrisponde al campo inviato della tabella prova      
    //if($contatore<=50 && $riga[2]=="no") {       NON SERVE + 
    $tipo_email "MIME-Version: 1.0\nContent-type: text/html; charset=utf-8";       
    $oggetto "E' solo una prova";       
    $destinatario "jyttjtjytjyjyyt@libero.it";       
    $headers "From: io <io@io.it>\n$tipo_email";       
    $headers .= "\r\nBcc: $riga[1]\r\n\r\n";       
    $headers .= "\r\nX-Mailer: PHP/" phpversion();       
    $messaggio "                  
    <html>                    
    <body>                      
    <table align=\"center\" width=\"600\" border=\"0\"bordercolor=\"#FF9900\">                        
    <tr>                          
    <td>                            
    <a href=\"http://www.io.it/io/io\" title=\"Il portale per personalizzare gli strumenti per io\" target=\"_blank\">                              
    <img src=\"http://127.0.0.1/altri/io/io/img/invio_news_img/pinguini.jpg\" border=\"0\"/>                            
    </a>                               
    </td>                        
    </tr>                      
    </table>                   
    </body>                  
    </html>                  "
    ;                             
    mail($destinatario$oggetto$messaggio$headers);       
    echo 
    "Email inviata a $riga[1]

    "

    // eseguo l'update della riga della tabella prova, in modo da far cambiare in si il valore del campo inviato      
    $query_uno "UPDATE prova SET inviato='$inviato' WHERE id='$id'";       
    $result mysql_query ($query_uno$nome); //<----QUESTO LO HAI CORRETTO
    //} else {        NON SERVE + 
    // break;       NON SERVE + 
    //}     NON SERVE + 

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    125
    Di che codice avresti bisogno per provare a darmi una mano?
    Se me lo dici, te lo mando. Non vorrei aprofittare della tua disponibilità, ma devo venire a capo di questa cosa e come avrai capito, non sono certo un guru del PHP

  8. #8
    news_prova.php

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    125
    La pagina news_prova ha tutto HTML, più lo script che ti ho inviato prima ed il metatag che fa refreshare la pagina ogni 10 secondi.

    Script che invia le mail:
    Codice PHP:
    $db_selection mysql_select_db($database_jacky$jacky) or die ("Selezione del database fallita

    "
    );         
    $query "SELECT * FROM prova WHERE inviato='no' LIMIT 0,50";            
    $result mysql_query ($query$jacky) or die ("query fallita");         
    while (
    $riga mysql_fetch_row($result)) {             
    $id=$riga[0];                  
    $inviato="si";                  
    $tipo_email "MIME-Version: 1.0\nContent-type: text/html; charset=utf-8";                  $oggetto "E' solo una prova";                  
    $destinatario "jyttjtjytjyjyyt@libero.it";                  
    $headers "From: Mia azienda <mia@azienda.it>\n$tipo_email";                  
    $headers .= "\r\nBcc: $riga[1]\r\n\r\n";                  
    $headers .= "\r\nX-Mailer: PHP/" phpversion();                  
    $messaggio "                                           <html>                                             <body>                                                 
    <table align=\"center\" width=\"600\" border=\"0\"bordercolor=\"#FF9900\">                                                     <tr>                                                         <td>                                                             
    <a href=\"http://www.miaazienda.it/rghgurrg/avvocati\" title=\"Il portale per personalizzare gli strumenti per l'attività legale\" target=\"_blank\">                                    <img src=\"http://127.0.0.1/altri/miaazienda/rghgurrg/img/invio_news_img/pinguini.jpg\" border=\"0\"/>                                    </a>                                                                 </td>                                                     </tr>                                                 </table>                                            </body>                                         
    </html>                  "
    ;                                        
    mail($destinatario$oggetto$messaggio$headers);                  
    echo 
    "Email inviata a $riga[1]

    "
    ;            
    $query_uno "UPDATE prova SET inviato='$inviato' WHERE id='$id'";                  $result_uno mysql_query ($query_uno$jacky);            

    Metatag:

    codice:
    <META HTTP-EQUIV="Refresh" content="10;url=news_prova.php">
    Come puoi vedere, lo script è quello che mi hai corretto tu e devo dire che così già quasi ci siamo. Fa quello che voglio io; cioè invia le mail a blocchi di 50 e fa un update sulla tabella del DB, cambiando lo stato del campo inviato da no a si.
    Ciò che mi occorrerebbe per chiudere, sarebbe una stampa a video che conti le mail inviate, rispetto al totale.
    Mi spiego meglio:
    invio primo blocco, al termine u na cosa del tipo "50 di 1000 mail inviate correttamente"
    refresh della pagina, invio secondo blocco ed al termine "100 di 1000 mail inviate correttamente" e così via fino ad arrivare a 1000 di 1000 mail inviate correttamente e stoppare il refresh.
    Chiedo troppo?

  10. #10
    ho capito
    ma così ti vai a impantanare.
    quello che vuoi fare tu è un'operazione che bisogna fare con tecnica ajax non con php puro:

    1.metti un bottone "invia mail" legato a una funzione javascript
    2. la funzione javascript tramite ajax chiama lo script php di prima che invia 50 mail
    3.quando lo script php finisce comunica via ajax alla funzione che ha finito
    4. la funzione javscript mostra a video "tot di 1000 mail inviate correttamente" e se incrementa un contatore. se il contatore = 1000 termina se è <1000 riprende dal punto 2

    se vuoi provarci leggiti questo:
    http://antirez.com/articoli/spaghettiajax.html
    io dico che in un paio di sere di impazzimento ci riesci!!



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.