【发布时间】: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 小时。我认为最好的解决方案是更换您的主机。