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 邮件:多个收件人?的主要内容,如果未能解决你的问题,请参考以下文章

PHP表单向多个收件人发送电子邮件

php 向多个发件人发送电子邮件通知

PHP SMTP邮件发送(可加附件)

使用 MailMessage 向多个收件人发送电子邮件?

PHP 邮件不在“收件人”标题中显示“收件人”

如何使用 python smtplib 向多个收件人发送电子邮件?