1

我们正在制作一个完美运行的 php 电子邮件。

从数据库中选择所有用户并向他们发送电子邮件是不错的选择。

但是,由于有大量的电子邮件需要发送,我们希望开始和暂停带有 [1000] 的电子邮件事务,以免服务器过载。

例子:

选择:1000;

暂停 MYSQL

选择另外 1000 个;

暂停 MYSQL

等等。

我阅读了有关 START TRANSACTION、COMMIT 和 ROLLBACK 功能的信息,我认为我实现了这一点。

有人可以帮我在 ROLLBACK 交易之前暂停 100 秒吗?

我不知道该怎么办..

到目前为止我得到了什么[前缀代码]..

$最大=1000;

$发送=0;

$回滚=假;

mysql_query('开始交易;');

$query = mysql_query("SELECT DISTINCT mail_id, customers_email_address newsletters WHERE ORDER BY mail_id ASC");

而($result=mysql_fetch_array($query){

如果($回滚==真){

$回滚=假;

mysql_query("回滚;");

}

[-----发送电子邮件的脚本-----]

$发送++;

如果( $max == $send ){

mysql_query("提交;");

$回滚=真;

}

}

干杯杰伊

4

3 回答 3

3

这里根本不需要交易——你没有更新任何东西。事实上,交易的开销在这里完全没有意义,所以我建议你把它拿出来。

你可以简单地(理论上,你可以为此编写代码)

  • 从数据库中选择前 1000 行:SELECT ... LIMIT 0, 1000
  • 将您的偏移量增加 1000
  • 选择接下来的 1000 行:SELECT ... LIMIT 1000, 1000
  • 冲洗并重复,直到从查询中返回少于 1000 行。

请注意,为了使该方法起作用,您需要按 ASC 顺序或其他方式按主键排序,以确保您不会两次获得同一行。

于 2013-01-08T15:46:17.107 回答
1

您只需要使用 cron 来安排您的发件人脚本并发送一些电子邮件。(在 sql 中使用 LIMIT)。

它每 M 分钟会发送超过 N 封电子邮件,服务器会很高兴;)

于 2013-01-08T15:45:33.890 回答
0

很少有如下选项:

1)您可以实现 Cronjob。

2) 有一个php的开源小应用程序PHPList,可以在几秒钟内集成。(我已经用过这个了,所以)

3)第3个选项,你可以使用php的sleep功能。(我不确定)

于 2013-01-08T15:55:43.880 回答