基于PHP和MYSQL向多个用户发送邮件

基于PHP和MYSQL向多个用户发送邮件,php,mysql,email,mysqli,Php,Mysql,Email,Mysqli,这是我的桌子: id emails names vip expire 1 1@exp.com name1 1 2015/03/25 12:10:22 2 2@exp.com name2 0 3 3@exp.com name3 1 2015/03/30 09:12:00 4 4@exp.com

这是我的桌子:

id      emails          names       vip     expire
1       1@exp.com       name1       1       2015/03/25 12:10:22
2       2@exp.com       name2       0   
3       3@exp.com       name3       1       2015/03/30 09:12:00
4       4@exp.com       name4       1       2015/05/01 20:10:11
5       5@exp.com       name5       1       2015/03/25 12:10:20
.
.
.
在此代码中:

从表中调用所有用户,其中仅包含具有活动帐户的用户

如果用户的帐户已过期,则将停用其帐户并向所有用户发送电子邮件

但不会为其帐户为0或未激活的所有用户发送电子邮件

活动=1| 未激活=0

用户数量为20万,每天增加用户

我认为应该这样做,以循环发送电子邮件

<?php
$db = mysqli_connect($mysql_server, $mysql_username, $mysql_password);
if (!$db)
{
die('Failed to connect to database server!<br>'.mysqli_error());
}
mysqli_select_db($db, $mysql_database) or die('Failed to select database<br>'.mysqli_error());

   $update = date("Y-m-d H:i:s");

   $sql = "SELECT * FROM ".$mysql_table." WHERE `vip` = '1' AND `expire` <= '".$update."'";
   $result = mysqli_query($db, $sql);
   if ($data = mysqli_fetch_array($result))
   {
        $emails = $data['emails'];
        $names = $data['names'];

        $sql = "UPDATE `".$mysql_table."` SET `vip` = '0' WHERE `vip` = '1' AND `expire` <= '".$update."'";
        mysqli_query($db, $sql);


        $msg = "Hi ".$names.",\nSecond line of text";
        mail($emails, "Expired Account", $msg);
   }
mysqli_close($db);
?>

选择后,您需要一段时间为每个人发送电子邮件

相反:

 if ($data = mysqli_fetch_array($result))
试试这个:

while ($data = mysqli_fetch_array($result))

你可能需要数一数:

$count=0
while ....


$count = $count+1;
if ($count <= 70){

  // your code to send emails
$count=0
虽然
$count=$count+1;

如果($count我希望你一切顺利,你有什么问题吗?@Naruto:谢谢你的回答,不会为所有帐户未激活的用户发送电子邮件。这是因为你的第一次查询只会选择活动的用户?!使用此代码你会超时。首先获取所有电子邮件并存储到一个变量,然后关闭连接开始向他们发送邮件。另一个解决方案是增加php.ini上的超时时间或使用set_time_limit。注意:如果您使用共享主机,请确保您的主机每小时支持这么多邮件。我也遇到过同样的问题,我发现我的主机对每个帐户有100个发送邮件限制。我认为您无法使用此服务器处理此问题。假设您是c例如,可以编写一个perl代码来检查您的作业表,它可以执行您添加到作业表中的作业。要发送2000封电子邮件,您必须等待29个小时。我认为最好的解决方案是更改主机。哦,我忘记了,非常感谢,但在我的托管网站上,我可以在一小时内发送70封电子邮件,我有2000多个用户。我能为您做些什么还是这个?@Mohammad change hoster。谢谢,这真的很有用。