簡體   English   中英

PHP,電子郵件和Cron

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM