consigli per inviare newsletter

luigi777

Utente Attivo
14 Feb 2008
1.073
1
38
38
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` (
  `id` bigint(8) unsigned auto_increment,
  `fullname` varchar(255),
  `email` varchar(255) UNIQUE,
  `browser` varchar(255),
  `ip` varchar(255),
  `activationHash` varchar(255) ,
  `send` int  default '0',
  `active` int ,
  `_update` TIMESTAMP 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.
 

luigi777

Utente Attivo
14 Feb 2008
1.073
1
38
38
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:

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.041
146
63
PR
www.borgo-italia.it
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
 

luigi777

Utente Attivo
14 Feb 2008
1.073
1
38
38
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.
 

luigi777

Utente Attivo
14 Feb 2008
1.073
1
38
38
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.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.041
146
63
PR
www.borgo-italia.it
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)
 

luigi777

Utente Attivo
14 Feb 2008
1.073
1
38
38
Massa, Italy
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)
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.