【问题标题】:unwanted bulk emailing in PHP or smtp serverPHP 或 smtp 服务器中不需要的批量电子邮件
【发布时间】: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”?

标签: php email


【解决方案1】:

您的 exapleous 代码确实为邮件函数的 $headers 参数提供了多个 To 标头。要设置接收器,使用$address 参数就足够了。当你的代码少一行时,你的代码应该开始正常工作了:

$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;
}

【讨论】:

    猜你喜欢
    • 2014-10-06
    • 2013-04-18
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-23
    • 2021-10-01
    相关资源
    最近更新 更多