将邮件拆分为单独的邮件


Split mailing in separate mailings

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

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

我有一系列电子邮件

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

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

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

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

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

我怎样才能遍历该数组直到 40 个地址,发送带有该列表的邮件,然后从 41->80 开始继续循环,依此类推?

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

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
}

我认为 Dagon 是对的,你真的应该在 for 循环中向每个人发送 1 而不是使用 BCC,但这里有一个循环的外壳,让你开始寻找答案:

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

为什么不使用内爆函数作为

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

像这样遍历列表,而不是使用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;
}