購読者に毎週最大 3,200 のニュースレターを送信するワードプレス プラグインがあります。ただし、800通を過ぎるとフリーズすることもあれば、1,200通を過ぎるとフリーズすることもあります(常に違う、特定のパターンはありません)。ホストとして Turbo SMTP を使用します。
これが私がそれを行う方法です:
すべてのメール アドレスが格納されているテーブルの行をループし、行ごとに ajax 呼び出しをトリガーします。
// *** massmailer.php ****
// get total count of subscribers
$sqlAll = "SELECT * FROM subscribers";
$resultAll = mysql_query($sqlAll);
$numrowsAll = mysql_num_rows($resultAll);
// send mail for each subscriber, increasing row pointer $i each time
$sql = "SELECT * FROM subscribers LIMIT $i, 1";
$result = mysql_query($sql);
while ($guy = mysql_fetch_array($result)):
$mail = new PHPMailer();
$mail->Host = 'pro.turbo-smtp.com';
.... (other smtp settings here)
$mail->Send();
$i ++; // increase the row pointer by 1
// if row is NOT the last in the table, repeat this step for the next row
if ($i < $numrowsAll) {
echo "<script>$('#placeholder_massmailer').append($('<div>').load('massmailer.php?i=<? echo $i ?>'))</script>";
}
endwhile;
それは完全に機能しますが、一定量の ajax 呼び出しの後に $.load ajax 呼び出しがフリーズすることがあります。
別のアーキテクチャを使用する必要がありますか? これには $.post の方が適していますか? wordpress プラグインの一部として機能します。フリーズすると、ワードプレスが「ハートビート」の ajax 呼び出しを送信しようとしていることに気づきましたか?
ありがとうマティアス