consigli per inviare newsletter

Discussione in 'PHP' iniziata da luigi777, 7 Maggio 2013.

  1. luigi777

    luigi777 Utente Attivo

    Registrato:
    14 Febbraio 2008
    Messaggi:
    1.061
    Mi Piace Ricevuti:
    1
    Punteggio:
    38
    Sesso:
    Maschio
    Località:
    Massa, Italy
    Salve, volevo sapere per fare uno script che mi mandi email a tante persone.

    io uso phpmailer :

    e la uso cosi:

    PHP:
                             $messaggio = new PHPMailer;
                    
    $messaggio->IsHTML(true);
                        
                    
    $messaggio->From   $mail_webmaster;
                    
    $messaggio->FromName "Amministratore";
                    
    $messaggio->AddAddress($db_mail); 
                    
    $messaggio->Body $body;
                    
    $messaggio->Subject $oggetto_email;
                    
                    if(!
    $messaggio->Send()) {
                        
    $error =  "errore nella spedizione: ".$messaggio->ErrorInfo;
                    } else {
                        
    $msg 'messaggio inviato, aspetta 2 secondi';
                        
    redirect("index.php",2);
                    }
    ora questo codice mi seriva per l'invio della password dimenticata.

    come posso modificarlo per inviare l'email per far la newsletter?

    io uso questi campi:
    PHP:
       CREATE TABLE `utenti_newsletter` (
      `
    idbigint(8unsigned auto_increment,
      `
    fullnamevarchar(255),
      `
    emailvarchar(255UNIQUE,
      `
    browservarchar(255),
      `
    ipvarchar(255),
      `
    activationHashvarchar(255) ,
      `
    sendint  default '0',
      `
    activeint ,
      `
    _updateTIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
      
    PRIMARY KEY  (`id`)) ENGINE MyISAM
    ho messo send 0, e protei aggiornarlo quando invio le email ed mettere un limit alla query?

    secondo voi funzionerebbe?

    grazie mille e buona giornata.
     
  2. luigi777

    luigi777 Utente Attivo

    Registrato:
    14 Febbraio 2008
    Messaggi:
    1.061
    Mi Piace Ricevuti:
    1
    Punteggio:
    38
    Sesso:
    Maschio
    Località:
    Massa, Italy
    ok, questo è il mio brutissimo codice che sto faccendo.
    Ma non so come ricavare il body e il titolo delle newsletter che la tutto il contenuto sta nella tabella newsletter:

    PHP:
      <?php
    require_once(dirname(__FILE__) . '/inc.php');
    require_once(
    dirname(__FILE__) . '/admin_mod.php');
    $page = new Page;
    $page->setTitle('Send Newsletter');
    $page->startBody();
    ?>
    <?php
    $id_newsletter 
    = (isset($_POST["id_newsletter"])) ? trim ($_POST["id_newsletter"]): '';

        if (isset(
    $_POST["submit"]))
        {
                
        
                
    $getUser =$db->query('SELECT * FROM utenti_newsletter')or die($db->error);
                
                
            while(
    $row $result->fetch_array())
            {
                    
    $messaggio = new PHPMailer;
                    
    $messaggio->IsHTML(true);
                        
                    
    $messaggio->From   $mail_webmaster;
                    
    $messaggio->FromName "Amministratore";
                    
    $messaggio->AddAddress($row["email"]); 
                    
    $messaggio->Body $body;
                    
    $messaggio->Subject $oggetto_email;
                    
                    if(!
    $messaggio->Send()) {
                        
    $error =  "errore nella spedizione: ".$messaggio->ErrorInfo;
                    } else {
                        
    $query $db->query("UPDATE utenti_newsletter SET send=1 WHERE `mail`='".$row['email']."'") or die($db->error);    
                        
    $msg "Invio newsletter inviata";
                    }
            }
            
            
           
        }
    ?>

    <p class="title2">Invia newsletter</p>
    <?php    if ( isset ( $error ) )    { echo '            <p class="error">' $error '</p>' "\n";    }    ?>
    <?php    
    if ( isset ( $msg ) )    { echo '            <p class="msg">' $msg '</p>' "\n";    } else {?>


        <form action="<?php echo $_SERVER['PHP_SELF']?>" method="post">
                <table align="center" >
                <tr>
          <td>Seleziona Newsletter</td>
          <td><?php echo "<select  name=\"id_newsletter\">";?>

            <option  selected="selected" value="0">Seleziona</option>
            <?php
        $result 
    $db->query("SELECT * FROM newsletter");
        
        while(
    $row $result->fetch_array())
        {
        
    $titolo$row['titolo'];
        
    $id $row['id'];
      
    ?>
        <option value="<?php echo $id?>"<?php if($id_newsletter=="".$id."") echo ' selected'?> ><?php echo $row["titolo"]; ?></option>
               <?php
      
    }
    ?>
          </select></td>
        </tr>
    <tr>
                      <tr>
                        <td><input type="submit" name="submit" value="Invia newsletter" /></td>
                      </tr>
                </tr>
            </table>
        </form>
        
    <?php }  
    non lo provato .. ditemi come posso recuperare i dati dall'altra tabella.
    vi ringrazio molto.
    buona serata.
     
    Ultima modifica: 7 Maggio 2013
  3. borgo italia

    borgo italia Super Moderatore Membro dello Staff SUPER MOD MOD

    Registrato:
    4 Febbraio 2008
    Messaggi:
    16.028
    Mi Piace Ricevuti:
    146
    Punteggio:
    63
    Sesso:
    Maschio
    Località:
    PR
    Home Page:
    ciao
    se non ho capito male vuoi fare un invio di newsletters. giusto?
    questo è uno schema di come avevo fatto una volta
    PHP:
    <?php
    //.......
    $messaggio = new PHPMailer;
    $messaggio->IsHTML(true);
    $messaggio->From   $mail_webmaster;
    $messaggio->FromName "Amministratore";
    $messaggio->Body $body;
    $messaggio->Subject $oggetto_email;
    //massimo 50 email alla volta, non ti conviene superare 50 al gg altrimenti rischi di entrare in qualche balcklist
    //e invio agli indirizzi ancora non inviati send = 0
    $query=mysql_query("SELECT email FROM utenti_newsletter WHERE send='0' ORDER BY fullname LIMIT 50");
    if(
    mysql_num_rows($query) > 0){
        while(
    $riga=mysql_fetch_array($query)){
            
    $db_mail=$riga['email'];
            
    $messaggio->AddAddress($db_mail);                
            if(!
    $messaggio->Send()) {
                
    $error =  "errore nella spedizione: ".$messaggio->ErrorInfo;//vedi p.s.
            
    } else {
                echo 
    "messaggio inviato a $db_mail<br />";
                
    //uppo send a inviato send = 1
                
    $uppa="UPDATE utenti_newsletter SET send='1' WHERE email='$db_mail'";
            }
            
    //ripulisci l'indirizzo per evitare invii multipli
            
    $messaggio->ClearAddresses();
            
    $messaggio->ClearAllRecipients();
            
    //ti conviene attendere tra un invio e l'altro per non intasare il server
            
    usleep(50);// mezzo secondo tra un invio e l'altro
        
    }
    }else{
        echo 
    "hai inviato tutto l'elenco: raggiorna send o non ci sono indirizzi";
    }
    //........
    ?>
    p.s.
    qui non l'ho messo, ma in caso di errore di trasmissione inserivo l'indirizzo che aveva dato l'errore in una tabella apposita per poi verificarlo ed eventualmente toglierlo dal db o correggerlo
     
  4. luigi777

    luigi777 Utente Attivo

    Registrato:
    14 Febbraio 2008
    Messaggi:
    1.061
    Mi Piace Ricevuti:
    1
    Punteggio:
    38
    Sesso:
    Maschio
    Località:
    Massa, Italy
    ok, ci sono:
    ora l'unico messaggio di errore che ricevo è questo:

    Notice: Undefined index: email in D:\xampp\htdocs\xxx\admin\newsletter_send.php on line 25
    Invalid address: You must provide at least one recipient email address.

    ti posto il codice:
    PHP:
     <?php
    require_once(dirname(__FILE__) . '/inc.php');
    require_once(
    dirname(__FILE__) . '/admin_mod.php');
    $page = new Page;
    $page->setTitle('Send Newsletter');
    $page->startBody();
    ?>
    <?php
    $id_newsletter 
    = (isset($_POST["id_newsletter"])) ? trim ($_POST["id_newsletter"]): '';

        if (isset(
    $_POST["submit"]))
        {
                
        
                
    $result =$db->query('SELECT newsletter.text as _body , newsletter.titolo as _titolo , newsletter.* FROM utenti_newsletter INNER JOIN newsletter')or die($db->error);
                
                
            while(
    $row $result->fetch_array())
            {
                    
    $messaggio = new PHPMailer;
                    
    $messaggio->IsHTML(true);
                        
                    
    $messaggio->From   $mail_webmaster;
                    
    $messaggio->FromName "Amministratore";
                    
    $messaggio->AddAddress($row["email"]); 
                    
    $messaggio->Body $row["_body"];
                    
    $messaggio->Subject $row["_titolo"];
                    
                    if(!
    $messaggio->Send()) {
                        
    $error =  "errore nella spedizione: ".$messaggio->ErrorInfo;
                    } else {
                        
    $query $db->query("UPDATE utenti_newsletter SET send=1 WHERE `email`='".$row['email']."'") or die($db->error);    
                        
    $msg "Invio newsletter inviata";
                    }
            }
            
            
           
        }
    ?>

    <p class="title2">Invia newsletter</p>
    <?php    if ( isset ( $error ) )    { echo '            <p class="error">' $error '</p>' "\n";    }    ?>
    <?php    
    if ( isset ( $msg ) )    { echo '            <p class="msg">' $msg '</p>' "\n";    } else {?>


        <form action="<?php echo $_SERVER['PHP_SELF']?>" method="post">
                <table align="center" >
                <tr>
          <td>Seleziona Newsletter</td>
          <td><?php echo "<select  name=\"id_newsletter\">";?>

            <option  selected="selected" value="0">Seleziona</option>
            <?php
        $result 
    $db->query("SELECT * FROM newsletter");
        
        while(
    $row $result->fetch_array())
        {
        
    $titolo$row['titolo'];
        
    $id $row['id'];
      
    ?>
        <option value="<?php echo $id?>"<?php if($id_newsletter=="".$id."") echo ' selected'?> ><?php echo $row["titolo"]; ?></option>
               <?php
      
    }
    ?>
          </select></td>
        </tr>
    <tr>
                      <tr>
                        <td><input type="submit" name="submit" value="Invia newsletter" /></td>
                      </tr>
                </tr>
            </table>
        </form>
        
    <?php 

    ?>
    <?php
    $page
    ->endBody();
    echo 
    $page->render('layout/template.php');
    ?> 
    mi sa che mi sono dimenticato come fare la inner join.
    idee?

    grazie mille e buona serata.
     
  5. luigi777

    luigi777 Utente Attivo

    Registrato:
    14 Febbraio 2008
    Messaggi:
    1.061
    Mi Piace Ricevuti:
    1
    Punteggio:
    38
    Sesso:
    Maschio
    Località:
    Massa, Italy
    risolto..

    ora come faccio fare che mi rifresca il send a 0?

    grazie mille.
     
  6. luigi777

    luigi777 Utente Attivo

    Registrato:
    14 Febbraio 2008
    Messaggi:
    1.061
    Mi Piace Ricevuti:
    1
    Punteggio:
    38
    Sesso:
    Maschio
    Località:
    Massa, Italy
    cosi come predento idea dal tuo codice non mi funziona:
    ansi non fa nessuna azione:

    ecco il codice:
    PHP:
     <?php
    require_once(dirname(__FILE__) . '/inc.php');
    require_once(
    dirname(__FILE__) . '/admin_mod.php');
    $page = new Page;
    $page->setTitle('Send Newsletter');
    $page->startBody();
    ?>
    <?php
    $id_newsletter 
    = (isset($_POST["id_newsletter"])) ? trim ($_POST["id_newsletter"]): '';

        if (isset(
    $_POST["submit"]))
        {
                
        
           
    $result =$db->query('SELECT newsletter.*, utenti_newsletter.*, newsletter.text as _body , newsletter.titolo as _titolo , newsletter.* FROM utenti_newsletter INNER JOIN newsletter WHERE active=1 and send=0')or die($db->error);
                
        if (
    $result->num_rows==1
        {
                
            while(
    $row $result->fetch_array())
            {
                    
    $messaggio = new PHPMailer;
                    
    $messaggio->IsHTML(true);
                        
                    
    $messaggio->From   $mail_webmaster;
                    
    $messaggio->FromName "Amministratore";
                    
    $messaggio->AddAddress($row["email"]); 
                    
    $messaggio->Body $row["_body"];
                    
    $messaggio->Subject $row["_titolo"];
                    
                    if(!
    $messaggio->Send()) {
                        
    $error =  "errore nella spedizione: ".$messaggio->ErrorInfo;
                    } else {
                        
    $query $db->query("UPDATE utenti_newsletter SET send=1 WHERE `email`='".$row['email']."'") or die($db->error);    
                        
    $msg "Invio newsletter inviata";
                    }
            }
            
         }else
         {
             
    $result =$db->query('SELECT * from  utenti_newsletter')or die($db->error);
                while(
    $row $result->fetch_array())
                {
                    
    $query $db->query("UPDATE utenti_newsletter SET send=0 WHERE `email`='".$row['email']."'") or die($db->error); 
                    
    $msg "fatto";
                }
         }     
      }
    ?>

    <p class="title2">Invia newsletter</p>
    <?php    if ( isset ( $error ) )    { echo '            <p class="error">' $error '</p>' "\n";    }    ?>
    <?php    
    if ( isset ( $msg ) )    { echo '            <p class="msg">' $msg '</p>' "\n";    } else {?>


        <form action="<?php echo $_SERVER['PHP_SELF']?>" method="post">
                <table align="center" >
                <tr>
          <td>Seleziona Newsletter</td>
          <td><?php echo "<select  name=\"id_newsletter\">";?>

            <option  selected="selected" value="0">Seleziona</option>
            <?php
        $result 
    $db->query("SELECT * FROM newsletter");
        
        while(
    $row $result->fetch_array())
        {
        
    $titolo$row['titolo'];
        
    $id $row['id'];
      
    ?>
        <option value="<?php echo $id?>"<?php if($id_newsletter=="".$id."") echo ' selected'?> ><?php echo $row["titolo"]; ?></option>
               <?php
      
    }
    ?>
          </select></td>
        </tr>
    <tr>
                      <tr>
                        <td><input type="submit" name="submit" value="Invia newsletter" /></td>
                      </tr>
                </tr>
            </table>
        </form>
        
    <?php 

    ?>
    <?php
    $page
    ->endBody();
    echo 
    $page->render('layout/template.php');
    ?> 
    mi vedi il perché

    grazie mille.
     
  7. luigi777

    luigi777 Utente Attivo

    Registrato:
    14 Febbraio 2008
    Messaggi:
    1.061
    Mi Piace Ricevuti:
    1
    Punteggio:
    38
    Sesso:
    Maschio
    Località:
    Massa, Italy
    ok, risolto era questo l'ingippo:

    if ($result->num_rows> 0)

    non avevo visto.

    ciao e grazie mille.
     
  8. borgo italia

    borgo italia Super Moderatore Membro dello Staff SUPER MOD MOD

    Registrato:
    4 Febbraio 2008
    Messaggi:
    16.028
    Mi Piace Ricevuti:
    146
    Punteggio:
    63
    Sesso:
    Maschio
    Località:
    PR
    Home Page:
    ciao
    ok, ma ti ricordo: attento a quante email invii al giorno, io non ci avevo pensato e sono finito, allora, in una blakclist e per un mese non ho potuto più inviare (anzi inviava, ma le email venivano bloccate)
    poi ti conviene mettere tra un invio e l'altro una pausa (il mezzo secondo basta così almeno è la mia esperienza)
     
  9. luigi777

    luigi777 Utente Attivo

    Registrato:
    14 Febbraio 2008
    Messaggi:
    1.061
    Mi Piace Ricevuti:
    1
    Punteggio:
    38
    Sesso:
    Maschio
    Località:
    Massa, Italy
    ok , apena mia zia mi fa la creazione dell'email newsletter@......
    uso anche l'smtp visto che nel suo servizio si puo usare.

    ti ringrazio molto e buona serata.
     
Sto caricando...

Condividi questa Pagina