【问题标题】:Split mailing in separate mailings在单独的邮件中拆分邮件
【发布时间】:2013-10-30 11:14:11
【问题描述】:

我尝试向 127 人发送邮件。我发现一封邮件的密件抄送部分只能有 99 个电子邮件地址。

所以我正在考虑将电子邮件数组分成 40 组,例如

我有一系列电子邮件

$emailaddresses = array(
    [0] => email1,
    [1] => email2, ...

所以我遍历数组并列出它们:

foreach($emailaddresses as $email) {
    $list .= $email.',';
}

然后我删除最后一个“,”并将它们添加到我的邮件对象中:

$mail->bcc = substr_replace($list ,"",-1);

如何遍历该数组直到 40 个地址,发送包含该列表的邮件,然后从 41->80 开始继续循环等等...?

【问题讨论】:

  • 您需要将它们作为密件抄送发送,还是您可以简单地遍历列表并为每个收件人发送一封邮件?
  • 为什么是 40?为什么不是全部?
  • array_chunk() 在这种情况下可能有用
  • @mariusnn:这也是一种可能,但我认为当您限制邮件数量而不是收件人数量时,发送错误的可能性会更低
  • mail() 可能会创建 5000 个连接,但使用 phpmailer 之类的东西会在整个循环中保持 1 打开。

标签: php email foreach


【解决方案1】:

您可以像这样遍历列表,而不是使用 array_chunk:

预先播种数组作为测试:

$someArray = array();
for ($i = 0; $i <= 368; $i++) {
    $someArray[$i] = $i;
}

你会使用的逻辑:

$interval = 40;

$segments = floor($i/$interval);

for($i = 0; $i <= $segments; $i++) {
    $elements = join(", ", array_slice($someArray,($i*$interval),$interval));
    // extra logic here; i.e. test/validate addresses
    print $elements;
}

【讨论】:

    【解决方案2】:

    首先;发送邮件的最简单且可能最干净的方式是为每人发送一封邮件,这意味着所有邮件在收件人字段中都只有自己的地址。

    foreach($arrayOfEmail as $email){
        mail($email, $subject, $message);
    }
    

    如果你必须分块发送,这是我最简单的方法:

    $segments = array_chunk($arrayOfEmail, 40);  // Split in chunks of 40 each
    for each($segments as $segment){             // For each chunk:
        $mailTo = implode($segment, ',');        // Concatenate all to one recipient string
        (...)                                    // BCC to headers+++
        mail($myEmail, $subject, $message);      // Send mail
    }
    

    【讨论】:

    • 是的,+1。 array_chunk 是一个很好的方法。
    【解决方案3】:

    为什么不使用内爆函数

    $mail_list=implode(",",$emailaddresses)
    it will give yor mail address as
    email1,email2,email3............... , lastemail
    

    【讨论】:

      【解决方案4】:

      我认为 Dagon 是对的,您确实应该在 for 循环中向每个人发送 1 而不是使用密件抄送,但这里有一个循环外壳可以让您开始寻找答案:

      $count = 0;
      foreach($emailaddresses as $email) {
          $count++;
          // Use the modulus to see if we are at a multiple of 40
          // Add the address to the BCC however you choose.
          if ($count % 40 == 0) {
              // Send the email and start a new one.
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2019-03-13
        • 2020-11-07
        • 1970-01-01
        • 1970-01-01
        • 2019-07-08
        • 2023-03-25
        • 1970-01-01
        • 1970-01-01
        • 2021-10-17
        相关资源
        最近更新 更多