必要なときに特定のグループに大量の電子メールを送信する必要がある組織のために、ソーシャル ネットワーキング ソフトウェア Elgg を使用します。メールの数は、グループに応じて 10 ~ 1000 の範囲になります。Web ホストは 1 時間あたり 500 通のメールしか許可しないため、8 秒ごとに 1 通のメールを送信するようにスクリプトを調整する必要があります。
Elgg で PHPmailer を使用しています。PHPmailer は、これら 2 つのスクリプト (以下のコード) を相互に組み合わせて使用し、メール配信を抑制すべきだと言っています。メーリング スクリプトでコードをどのように使用するかはわかっていますが、いくつか不明な点があります。
1) セーフモードの目的がよくわからない
2) set_time_limit を調べた後、10 か 1000 かにかかわらず、すべての潜在的な電子メールを送信できるように、これを時間に設定する必要があるようです。または、タイムアウトが必要な場合に備えて、ループごとに最大 30 秒ですか?
3) 必要なものを取得するには、これをどのように設定すればよいですか?
コードを説明する PHPmailer へのリンク:
http://phpmailer.worxware.com/index.php?pg=tip_ext
http://phpmailer.worxware.com/index.php?pg=tip_pause
<?php
/* The following code snippet with set the maximum execution time
* of your script to 300 seconds (5 minutes)
* Note: set_time_limit() does not work with safe_mode enabled
*/
$safeMode = ( @ini_get("safe_mode") == 'On' || @ini_get("safe_mode") === 1 ) ? TRUE : FALSE;
if ( $safeMode === FALSE ) {
set_time_limit(300); // Sets maximum execution time to 5 minutes (300 seconds)
// ini_set("max_execution_time", "300"); // this does the same as "set_time_limit(300)"
}
echo "max_execution_time " . ini_get('max_execution_time') . "<br>";
/* if you are using a loop to execute your mailing list (example: from a database),
* put the command in the loop
*/
while (1==1) {
set_time_limit(30); // sets (or resets) maximum execution time to 30 seconds)
// .... put code to process in here
if (1!=1) {
break;
}
}
?>
と
<?php
/* Note: set_time_limit() does not work with safe_mode enabled */
while (1==1) {
set_time_limit(30); // sets (or resets) maximum execution time to 30 seconds)
// .... put code to process in here
usleep(1000000); // sleep for 1 million micro seconds - will not work with Windows servers / PHP4
// sleep(1); // sleep for 1 seconds (use with Windows servers / PHP4
if (1!=1) {
break;
}
}
?>