[英]PHP, Email and Cron
我再說一遍我的問題,我有一個mysql數據庫,它在共享主機上保存要發送的電子郵件。 我想運行一個cron作業,它將每10分鍾左右讀取一次數據庫並發送出數據庫中的所有消息。
現在我的問題是,用php讀取我的數據庫並小批量發送電子郵件的最佳方法是什么,這樣我才不會淹沒共享主機。
假設使用PDO,並為不了解您的模式做了一些調整,它可能看起來像這樣:
$dbh = new PDO('mysql:dbname=testdb;host=127.0.0.1', 'dbuser', 'dbpass');
$msgh = $dbh->prepare('SELECT subject, body from message where listname = :listname');
$msgh->bindParam(':listname', $listname, PDO::PARAM_STR);
$msgh->execute();
$msg = $msgh->fetch(PDO::FETCH_ASSOC);
$usrh = $dbh->prepare('SELECT recipient from userlist where is_subscribed_to = :listname');
$usrh->bindParam(':listname', $listname, PDO::PARAM_STR);
$usrh->execute();
while ($recipient = $usrh->fetch(PDO::FETCH_ASSOC)) {
mail($recipient, $msg['subject'], $msg['body']);
if ($over_throttle) {
sleep(THROTTLE_SLEEP_SECONDS);
$over_throttle = 0;
}
++$over_throttle;
}
至於“預寫”,您可以看看phplist 。
我會把限制留給電子郵件服務器。 即,在本地運行電子郵件服務器,然后讓您的PHP代碼將所有這些消息中繼到該服務器。 然后將電子郵件服務器本身配置為僅以一定速率發送出去。
好吧,我想出了與PDO類似的解決方案。 將其作為cron作業運行是否有任何無法預料的問題?
<?php
$con = mysql_connect("localhost","root","123456");
$throttle = 0;
$batch = 50;
$pause = 10; // seconds
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("maildb", $con);
// Message Table
$MSGresult = mysql_query("SELECT * FROM msgs");
// User Table
$USERresult = mysql_query("SELECT * FROM members");
while($MSGrow = mysql_fetch_array($MSGresult))
{
while($USERrow = mysql_fetch_array($USERresult))
{
mail($USERrow['email'],$MSGrow['subject'],$MSGrow['body']);
$throttle += 1;
if ($throttle > $batch ) { sleep($pause); $throttle = 0;}
}
mysql_data_seek($USERresult,0);
}
mysql_close($con);
?>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.