PHP 邮件:多个收件人?
Posted
技术标签:
【中文标题】PHP 邮件:多个收件人?【英文标题】:PHP mail: Multiple recipients? 【发布时间】:2011-11-15 09:14:46 【问题描述】:我有这个代码:
<?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);
?>
在我的表格(“电子邮件”)中,我有多个地址。 (它们不是逗号分隔的。) 我怎样才能将我的消息发送到所有这些地址?
【问题讨论】:
【参考方案1】:用逗号分隔地址。
$to=array();
while($row = mysql_fetch_array($result))
array_push($to, $row['address']);
...
mail(implode(',', $to), $submit, $message, $headers);
【讨论】:
你的第 3 行也可以写成 $to[] = $row['address'];字符少得多。 :)【参考方案2】:while($row = mysql_fetch_array($result))
$addresses[] = $row['address'];
$to = implode(", ", $addresses);
正如mail()
manual page 中指定的那样,函数的“to”参数可以采用逗号分隔的地址列表。
【讨论】:
@mgraph 我不确定。不过,在 RFC 2822 中说“每行字符必须不超过 998 个字符,并且应该不超过 78 个字符,不包括 CRLF。”。 faqs.org/rfcs/rfc2822.html【参考方案3】:我刚刚测试了您提供的代码,在使用它们之前,人们需要知道使用这种方式(“收件人”字段中的多个地址),该电子邮件中的每个人都可以看到所有目的地。
此外,如果您使用密件抄送,他们也会知道列表中的第一个人。
注意! :)
【讨论】:
【参考方案4】:你只需要使用GROUP_CONCAT
返回由','
分隔的结果
$result = mysql_query("SELECT GROUP_CONCAT(address) FROM email");
【讨论】:
【参考方案5】:根据上面 Alex 的回答,即使您使用密件抄送,收件人也会知道列表中的第一个人。对此的解决方案是将单独的副本一个一个地发送到每个地址。
$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'
);
【讨论】:
以上是关于PHP 邮件:多个收件人?的主要内容,如果未能解决你的问题,请参考以下文章