PHP 中的电子邮件循环


email looping in php

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

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>";
}

您可以修改脚本以从某个数字开始拉取收件人,直到所有收件人都得到服务,输出 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...
}