Invio mail con destinatari da mysql con inserimento di nome e cognome

Madera

Nuovo Utente
25 Giu 2014
10
0
0
Ciao a tutti!
Chiedo agli esperti per risolvere un problema di invio mail :D .

Sto usando la classe phpMailer per l'invio di una newsletter che recupera i destinatari all'interno di un database mysql e fin qui nessun problema, faccio la chiamata al db utilizzando questo codice:

PHP:
$result = mysql_query("SELECT email FROM newsletter");
while($row = mysql_fetch_array($result))
	{
    $to = $row['email'];
    $mail->AddBCC($to); // add each DB entry to list of recipients
	}
	$mail->AddAddress("info@miosito.it", "Mio Nome");

Mi piacerebbe riuscire a fare in modo che ad ogni destinatario la mail cominciasse con ad es. Buongiorno "nome cognome", campi presenti nella tabella newsletter.
Adesso ovviamente recupera solo gli indirizzi email e manda la mail a tutti in modo generico, mi piacerebbe che all'invio facesse un controllo e inserisse i campi "nome" e "cognome" in base alla mail che sta inviando.

Come potrei risolvere questo problema?

Inoltre già che ci sono chiedo ancora...

Ho notato che phpMailer se incontra un indirizzo non valido, es. info@mionome (senza .ext), mi blocca lo script e non mi fa fare l'invio, andando a correggere l'indirizzo tutto funziona correttamente.
E' un problema mio o della classe? posso bypassare gli indirizzi sbagliati in modo da inviare comunque la newsletter evitando di bloccare lo script?

Grazie mille a tutti!!!
 
Ciao,
per come è strutturato lo script non puoi, inoltre è sconsigliato utilizzare phpmailer per newsletter (vieni messo in blacklist tempo zero), utilizza servizi come mailchimp (gratis fino a 12.000 email/mese a 2.000 indirizzi).

Per la seconda domanda basta aggiungere un if nel while:

PHP:
$result = mysql_query("SELECT email FROM newsletter");
while($row = mysql_fetch_array($result))
    {
    // Se l'indirizzo non è valido lo salto
    if (!filter_var($row['email'], FILTER_VALIDATE_EMAIL)) { continue; }
    $to = $row['email'];
    $mail->AddBCC($to); // add each DB entry to list of recipients
    }
    $mail->AddAddress("info@miosito.it", "Mio Nome");
 
Ciao Rey, grazie per la risposta, molto gentile.

Non volessi gestire la cosa con Mail Chimp (considera che saranno invii per 100/200 utenti al max, e se va bene una/due volte al mese) è possibile modificare lo script per gestire la cosa.

Praticamente io adesso uso lo stesso sistema per gli invii singoli che vanno a recuperare i dati tramite Id dell'utente, quindi (ho fatto un get->id se riesco a spiegarmi) e in base a quello il mio file php invia la mail utilizzando l'indirizzo email che recupera dal database così come il nome o altri dati che voglio.
Come dicevo sarebbe da attivare la funzione su tutti. Esiste uno script alternativo (senza che mi vada ad impantanare con codice che non conosco) da sostituire a quello che uso attualmente.

Se mi dici che diventa difficile cerco una soluzione alternativa.

Grazie ancora!
 
Riapro nuovamente la discussione...

Ho recuperato questo script

PHP:
$utenti = array("Pippo" => "pippo@pippo.it",
                      "Pluto" => "pluto@mpluto.it");
 
$oggetto = "Newsletter";
 
foreach ($utenti as $nome => $email)
{
	$messaggio = "Ciao $nome,\r\n testo della newsletter";
 
	mail($email, $oggetto, $messaggio);
 
}

Che effettivamente fa quello di cui avrei bisogno, solo che ovviamente adesso i destinatari vengono inseriti manualmente nell'array.
Posso sfruttare una cosa del genere collegando il database al posto dell'elenco "manuale" nell'array?
Nel caso come dovrei inserire il codice con la query e tutto il resto?

Grazie mille!
 
Ultima modifica:
Finchè non finisci in blacklist dovrebbe funzionare :)

PHP:
// Imposto ed eseguo la query
$query = "SELECT nome, email from newsletter";
$result = mysql_query($query, $myconn) or die(mysql_error());

// Conto il numero di occorrenze trovate nel db 
$numrows = mysql_num_rows($result);

// Se il database è vuoto lo stampo a video 
if ($numrows==0) { echo "Database vuoto!"; }

// Se invece trovo delle occorrenze... 
else 
{ 
  // Avvio un ciclo
  for($a=$numrows; $a>=1; $a--){
    $row = mysql_fetch_array($result);
    $nome = $row[0]; 
    $email = $row[1];

    $messaggio = "Ciao $nome,\r\n testo della newsletter";
 
    mail($email, $oggetto, $messaggio); 
}  
}
 
Grazie Rey,
faccio una prova. Se poi finisco in black list, cerco un sistema più sicuro.
Grazie ancora.
Buona giornata
 

Discussioni simili