Akos
Akos

Reputation: 2007

PHP mail: Multiple recipients?

I have this 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);
?>

In my table ("email") I have multiple addresses. (They are not comma sepparated.) How could I send my message to all of those addresses?

Upvotes: 33

Views: 92901

Answers (5)

oldboy
oldboy

Reputation: 5964

According to Alex's answer above, recipients will know the first person in the list even if you're using BCC. A solution for this would be to send individual copies to each address one by one.

$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]'
  );
}

Upvotes: 1

You just need to use GROUP_CONCAT to return the results separated by ','

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

Upvotes: 1

Alex Spataru
Alex Spataru

Reputation: 61

I just tested the codes you presented and before using them, people need to know that using this way (multiple addresses in 'to' field), every single person in that email can see all the destinatars.

Also, if you're using Bcc, they'll also know the first person in the list.

Be aware! :)

Upvotes: 3

Amber
Amber

Reputation: 527448

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

As specified on the mail() manual page, the "to" parameter of the function can take a comma-separated list of addresses.

Upvotes: 48

Brad
Brad

Reputation: 163602

Separate the addresses with commas.

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

...

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

Upvotes: 9

Related Questions