5

私は高校の学生評議会のために簡単なテキストメッセージングサービスに取り組んでおり、ホスティングサービスでは1分間に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秒ごとに1通のメールを送信することと同じです。

したがって、すべてのメールを次々に送信するループがある場合は、すべてのメールが送信された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 に答える