PHP邮件:多个收件人?

32

我有这段代码:

<?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 = "example@example.com";
$headers = "From:" . $from;
mail($to,$subject,$message,$headers);
?>

在我的表格 "email" 中,我有多个地址。(它们不是逗号分隔的。)如何将我的消息发送到所有这些地址?

5个回答

48
while($row = mysql_fetch_array($result))
{
    $addresses[] = $row['address'];
}
$to = implode(", ", $addresses);
根据mail()手册页面指定,该函数的"to"参数可以接受一个由逗号分隔的地址列表。

2
@mgraph 我不确定。虽然,在RFC 2822中指出:“每行字符的长度不能超过998个字符,应该不超过78个字符,不包括CRLF。”。http://www.faqs.org/rfcs/rfc2822.html - jeromej

9
用逗号分隔地址。
$to=array();
while($row = mysql_fetch_array($result)) {
    array_push($to, $row['address']);
}

...

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

7
第三行也可以写成 $to[] = $row['address'];,而且字符数更少。 :) - Robbie Smith

3

我刚刚测试了你提供的代码,在使用之前,人们需要知道这种方式(在“收件人”字段中添加多个地址)会让每个接收邮件的人都能看到所有的收件人。同时,如果你使用密送功能,他们也会知道列表中的第一个人。

请注意!


1
你只需要使用GROUP_CONCAT','分隔返回结果。
$result = mysql_query("SELECT GROUP_CONCAT(address) FROM email");

0
根据Alex上面的回答,即使您使用BCC,收件人也会知道列表中的第一个人。解决方法是逐个向每个地址发送单独的副本。
$emails = ['a@example.com', 'b@example.com', 'c@example.com'];
foreach ($emails as $email){ // or $result as $row
  mail(
    $email, // or $row['address']
    'Same Subject',
    'Same Content',
    'From: same_sender@example.com',
    '-f same_sender@example.com'
  );
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接