【问题标题】:Send mail to multiple users based on PHP and MYSQL基于 PHP 和 MYSQL 向多个用户发送邮件
【发布时间】:2015-05-22 10:48:59
【问题描述】:

这是我的桌子:

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

用户数200万,每天都在增加用户。

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

<?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);
?>

【问题讨论】:

  • 我希望这对你来说一切顺利,你有什么问题吗?
  • @Naruto:感谢您的回答,不会为所有未激活帐户的用户发送电子邮件。
  • 那是因为你的第一个查询只选择了活跃的用户?!
  • 使用这个代码你会得到超时。首先获取您所有的电子邮件并存储到一个变量中,然后在关闭连接后开始向他们发送邮件。其他解决方案是增加 php.ini 的超时时间或使用 set_time_limit。注意:如果您使用共享主机,请确保您的主机每小时支持这么多邮件。我有同样的问题,我发现我的主机每个帐户有 100 个发送邮件限制。
  • 我认为你不能用这台服务器处理这个问题。例如,假设您可以编写一个 perl 代码来检查您的工作表,它会执行您添加到工作表中的工作。要发送 2000 封电子邮件,您必须等待长达 29 小时。我认为最好的解决方案是更换您的主机。

标签: php mysql email mysqli


【解决方案1】:

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

改为:

 if ($data = mysqli_fetch_array($result))

试试这个:

while ($data = mysqli_fetch_array($result))

【讨论】:

  • 哦。我忘记了,非常感谢,但是在我的托管网络中,我将能够在一小时内发送 70 封电子邮件,并且我有 2000 多个用户我该怎么办?
  • @Mohammad 更改主持人。
【解决方案2】:

你可能需要一个计数:

$count=0
while ....


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

  // your code to send emails

在此之后,您需要在一小时后发送一些东西,也许您在服务器中配置了 cron。

【讨论】:

  • 谢谢,这真的很有用。
猜你喜欢
  • 2014-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多