it-swarm.it

PHP mail: più destinatari?

Ho questo codice:

<?php
include("db.php");

$result = mysql_query("SELECT * FROM email");

while($row = mysql_fetch_array($result))
{
$to = $row['address'];
}
$subject = "Test mail";
$message = "Hello! This is a simple email message.";
$from = "[email protected]";
$headers = "From:" . $from;
mail($to,$subject,$message,$headers);
?>

Nella mia tabella ("email") ho più indirizzi. (Non sono separati da virgola.) Come posso inviare il mio messaggio a tutti quegli indirizzi?

29
Akos
while($row = mysql_fetch_array($result))
{
    $addresses[] = $row['address'];
}
$to = implode(", ", $addresses);

Come specificato nella pagina di manuale mail() , il parametro "to" della funzione può prendere un elenco di indirizzi separato da virgole.

44
Amber

Separare gli indirizzi con virgole.

$to=array();
while($row = mysql_fetch_array($result)) {
    array_Push($to, $row['address']);
}

...

mail(implode(',', $to), $submit, $message, $headers);
8
Brad

Ho appena testato i codici che hai presentato e prima di usarli, le persone devono sapere che usando questo modo (più indirizzi nel campo "a"), ogni singola persona in quell'email può vedere tutti i destinatari.

Inoltre, se stai usando Ccn, conosceranno anche la prima persona nell'elenco.

Sii consapevole! :)

2
Alex Spataru

Devi solo usare GROUP_CONCAT per restituire i risultati separati da ','

$result = mysql_query("SELECT GROUP_CONCAT(address) FROM email");

Secondo la risposta di Alex sopra, i destinatari conosceranno la prima persona nell'elenco anche se stai usando BCC. Una soluzione per questo sarebbe quella di inviare copie individuali a ciascun indirizzo uno per uno.

$emails = ['[email protected]', '[email protected]', '[email protected]'];
foreach ($emails as $email){ // or $result as $row
  mail(
    $email, // or $row['address']
    'Same Subject',
    'Same Content',
    'From: [email protected]',
    '-f [email protected]'
  );
}
0
BugWhisperer