电子邮件循环在PHP中

时间:2012-08-13 01:44:41

标签: php email smtp

我使用下面的代码向我的数据库中的许多人发送电子邮件,但它通常会超时并且不会发送给所有人。请告诉我如何在php中设置它,以便它在PHP中每10分钟只发送1000封电子邮件?

require_once "Mail.php";

$from = "xxx Support <$sender>";
$to = "$to";
$subject = "$subject";
$body = "Dear $fname,\n\n$note\n\n\nYou are getting this email because you registered on our website www.xxx.com and agreed to our Terms and Conditions which includes to receive email from us at any time to your email address $to.";

$host = "smtp1.xxx.net";
$username = "no_reply@xxx.net";
$password = "4t46546$#@?";

$headers = array ('From' => $from,
  'To' => $to,
  'Subject' => $subject);
$smtp = Mail::factory('smtp',
  array ('host' => $host,
    'auth' => true,
    'username' => $username,
    'password' => $password));

$mail = $smtp->send($to, $headers, $body);

if (PEAR::isError($mail)) {
  echo("<p>" . $mail->getMessage() . "</p>");
}

// Show sent emails.
echo "$row[fname] $row[lname] ($row[email])<br>";
}

1 个答案:

答案 0 :(得分:0)

您可以修改脚本以从特定号码开始提取收件人,并且在提供所有收件人之前,输出META重定向以强制浏览器从停止的位置重新加载。

想象:

<?php
// Start from $x, or zero if no $x
$x = ( isset( $_REQUEST['x'] ) ? $_REQUEST['x'] : 0 ); 

// Count total number of recipients
$rs = mysql_query('SELECT COUNT(*) AS total FROM recipients ');  
if ( $rs ) $row = mysql_fetch_assoc( $rs );
$total = $row['total'];

// Pull recipients $x through $x+1000 from database  
$rs = mysql_query('SELECT * FROM recipients ORDER BY email ASC LIMIT ' . $x . ', 1000 ' );
// Count number of recipients in query result set
$num_recipients = mysql_num_rows( $rs ); 

while ( $row = mysql_fetch_assoc( $rs ) ){
    // Send the message here...
}

if ( ( $num_recipients + $x) < $total ){
    // We've not yet reached the total # of recipients
    // Output the meta redirect to start from ($x+1000).
    echo '<meta http-equiv="REFRESH" content="0;url=this-script.php?x=' . ($x+1000) . '">';
} else {
    // We've finished, do something...
}