5

我正在为我高中的学生会开发一个简单的短信服务,而我的托管服务只允许每分钟发送 19 条 PHP 邮件,所以有没有办法可以设置间隔只发送 15 封电子邮件,等待分钟,再发送 15 封邮件,等待,直到所有邮件都发送完毕?下面是我的一些代码,您可能需要看到的只是“foreach”部分。

$subject =     ""; 
$message =     "Hey, $first! $messageget";

$header =     'From: Student Council<email@email.net>' . "\r\n" .
               'Reply-To: email@email.net' . "\r\n" . 
              'X-Mailer: PHP/' . phpversion(); 


foreach($to as $value) { 

    $result = mail($value, $subject, $message, $header); 



} 
4

5 回答 5

8

在 60 秒内发送 15 封邮件相当于每 4 秒发送一封邮件。

因此,如果您有一个循环会一个接一个地发送所有邮件,那么您可以在发送完每封邮件后执行 a 来减速sleep(4)

foreach($to as $value) { 
    $result = mail($value, $subject, $message, $header); 
    sleep(4);
} 

这比计算何时发送下一批 15 封邮件然后再等待 60 秒要容易得多。:)

此外,它会均衡 CPU 和网络资源的使用,并且不会在 60 秒后达到峰值。

于 2012-10-14T22:02:45.890 回答
4

对于这种情况,您可以使用 cron 作业。
http://www.google.com.tr/?q=cron+job+sending+email+php&oq=php+cron+job+sending
https://serverfault.com/questions/421485/cron-job-sending-一次批量发送电子邮件

于 2012-10-14T21:24:46.537 回答
2
foreach($to as $i=>$value) { 
    if($i%15==1) sleep(60);
    $result = mail($value, $subject, $message, $header);
} 

计数可以用 Modulus $i%15 完成(每 15 次运行一次),然后用 sleep(60) 暂停;

(上面的答案假设您的 array_keys 是数字并且按顺序,您也可以使用:)

$i=0;
foreach($to as $value) { 
    if($i%15==1) sleep(60);
    $result = mail($value, $subject, $message, $header);
    $i++;
} 
于 2012-10-14T21:27:08.177 回答
1

您只需使用以下功能:

 sleep(60);

把它放在你的循环中。

编辑:

对于电子邮件计数,只需在循环中添加已发送的电子邮件:

$i=0;  // about the foreach loop

并在循环调用内

if($i<15){ $i++; continue; }
else{ $i=0; }

sleep(60);

希望清除它。

EDIT2:如果没有,这里:

$subject =     ""; 
$message =     "Hey, $first! $messageget";

$header =     'From: Student Council<email@email.net>' . "\r\n" .
               'Reply-To: email@email.net' . "\r\n" . 
              'X-Mailer: PHP/' . phpversion(); 

$i=0;
foreach($to as $value) { 

    $result = mail($value, $subject, $message, $header); 

    if($i<15){ $i++; continue; }

  sleep(60);
} 
于 2012-10-14T21:18:17.733 回答
1

You can use the sleep() function :

 sleep(60); // wait during 60 seconds
于 2012-10-14T21:18:54.127 回答