【发布时间】:2015-11-24 22:33:20
【问题描述】:
在我的 PHP 中,如果配置指定不使用 PEAR,我有以下代码处理电子邮件:
$headers = '';
foreach($this->headers as $key => $value)
$headers .= "$key: $value\r\n";
foreach($addresses as $address)
{
$headers .= "To: $address\r\n";
if(!mail($address, $subject, $message, $headers))
return FALSE;
}
如您所见,PHP::mail() 的意图是根据数组 $addresses 中的地址将电子邮件一一发送到邮件服务器。这多年来一直运行良好。
我现在有一个我的软件用户遇到重复电子邮件的问题,每个电子邮件地址数量不同。他的配置使用上面的代码,因此每个电子邮件主题/内容都会多次发送到各个地址,但到达每个用户邮箱的电子邮件在“收件人:”字段中显示多个地址,并且一些用户报告收到相同的电子邮件超过 50 次。
我很确定我的代码不应该受到责备(这是我 10 多年来第一次在使用该代码和多次安装时遇到过这种情况)所以我现在不得不询问这是否是 smtp 服务器的问题PHP 将电子邮件发送到。
我对这样的服务器不太熟悉,所以: a) 是否有一些 smtp 服务器配置将接收传入的单独地址电子邮件流,在短时间内评估每个电子邮件的主题和内容,确定它们是同一封电子邮件,然后转发到具有多个地址的单个电子邮件到:字段?让我感到震惊的是,任何自尊的 smtp 服务器都可能将其视为一种有效的电子邮件发送方式,但我不知道谷歌的术语。
b) 如果发生了 a),收件人:字段中的退回电子邮件是否会生成重复电子邮件,发送到收件人:字段中的所有先前地址?
提前感谢您的帮助和建议。
【问题讨论】:
-
在
mail()的调用之间有什么东西可以重置$headers,因为根据你的sn-p,这将是我的猜测 -
我会明确地说,确实是您的代码 归咎于此:随着循环的每次迭代,您添加一个地址,收件人列表变得越来越长!这段代码显然从未经过真正的测试!
-
在您的代码示例之后,您将在每次循环执行中添加新的
To标头,构建您的标头列表非常长,并且脚本在 imo 中运行正常。有了$address变量后,为什么要在标题后面加上“To”?