我试图给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;
}