web-dev-qa-db-fra.com

PHP mail: plusieurs destinataires?

J'ai ce code:

<?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);
?>

Dans ma table ("email") j'ai plusieurs adresses. (Ils ne sont pas séparés par des virgules.) Comment pourrais-je envoyer mon message à toutes ces adresses?

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

Comme spécifié sur la page de manuel mail() , le paramètre "to" de la fonction peut prendre une liste d'adresses séparées par des virgules.

44
Amber

Séparez les adresses par des virgules.

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

...

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

Je viens de tester les codes que vous avez présentés et avant de les utiliser, les gens doivent savoir que de cette façon (plusieurs adresses dans le champ "à"), chaque personne dans cet e-mail peut voir tous les destinataires.

De plus, si vous utilisez Cci, ils connaîtront également la première personne de la liste.

Savoir! :)

2
Alex Spataru

Vous avez juste besoin d'utiliser GROUP_CONCAT pour renvoyer les résultats séparés par ','

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

Selon la réponse d'Alex ci-dessus, les destinataires connaîtront la première personne de la liste même si vous utilisez BCC. Une solution serait d'envoyer des copies individuelles à chaque adresse une par une.

$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