web-dev-qa-db-ja.com

PHP mail:複数の受信者?

私はこのコードを持っています:

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

テーブル(「電子メール」)に複数のアドレスがあります。 (これらはコンマ区切りではありません。)どうすればそれらのアドレスすべてにメッセージを送信できますか?

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

mail()マニュアルページ で指定されているように、関数の「to」パラメータはコンマ区切りのアドレスのリストを取ることができます。

44
Amber

アドレスをコンマで区切ります。

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

...

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

あなたが提示したコードをテストしましたが、使用する前に、この方法(「to」フィールドの複数のアドレス)を使用すると、そのメールのすべての人がすべての宛先を見ることができることを知る必要があります。

また、Bccを使用している場合は、リストの最初の人も知っています。

注意してください! :)

2
Alex Spataru

GROUP_CONCATを使用して、','で区切られた結果を返すだけです。

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

上記のAlexの回答によれば、BCCを使用している場合でも、受信者はリストの最初の人を知っています。これに対する解決策は、個々のコピーを各アドレスに1つずつ送信することです。

$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