拆分邮寄在单独的邮件中

时间:2013-10-21 19:47:45

标签: php email foreach

我试图向127人发送邮件。我发现在一封邮件中,bcc-part中只能有99封电子邮件地址。

所以我想把电子邮件数组分成40组,例如

我有一系列电子邮件

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

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

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

然后我删除最后一个','并将它们添加到我的mail-object:

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

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

4 个答案:

答案 0 :(得分:3)

首先;发送邮件最简单也可能最干净的方法是为每个邮件发送一个邮件,这意味着所有这些邮件都只能在to-field中拥有自己的地址。

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 :(得分:1)

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

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

答案 2 :(得分:0)

为什么不使用implode函数

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

答案 3 :(得分:0)

您可以像这样迭代列表,而不是使用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;
}