我正在开发一个 PHP - jQuery 简单脚本,该脚本在每个 PHP 上发送电子邮件。
这是我的代码:
<HTML>
<head>
<script src="//code.jquery.com/jquery-1.10.2.js"></script>
</head>
<?php
require "./config.php";
ConnectWithMySQLDatabase();
$time = date('h:i:s');
$result = mysql_query("SELECT * FROM `emails`");
while($row = mysql_fetch_array($result))
{
$email = addslashes($row['email']);
?>
<script type="text/javascript">
setTimeout(function() {
$.post( "./Sender.php", { name: "<?PHP echo $email;?>", time: "<?PHP echo $time;?>" })
.done(function( data ) {
$( "#result" ).html( "Email sended to: " + data + "<br>");
});
}, 5000);
</script>
<?PHP
}
?>
<div id="result"></div>
我的代码的问题是,它等待了 5 秒,然后立即急速发送电子邮件。
- 如何让此脚本每 5 秒发送 1 封电子邮件,直到所有电子邮件均发送完毕?
- 我怎样才能让这个脚本在 1 行显示 1 个结果,然后在下面的行显示下一个结果,依此类推?现在,脚本仅在一行上打印:
Email sent to:
并更改电子邮件,但不会生成更多行..
提前致谢!
最佳答案
回答您的问题:
您的 PHP 代码生成一个 javascript 脚本,其中包含对 setTimeout
的大量调用函数,但它们都接收 5000 作为参数,因此,很自然,所有电子邮件都会立即发送。
我认为你可以通过向每个 setTimeout
添加 5000 来解决这个问题,像这样:
$result = mysql_query("SELECT * FROM `emails`");
$wait = 0;
while($row = mysql_fetch_array($result))
{
$email = addslashes($row['email']);
$wait += 5000;
?>
<script type="text/javascript">
setTimeout(function() {
$.post( "./Sender.php", { name: "<?PHP echo $email;?>", time: "<?PHP echo $time;?>" })
.done(function( data ) {
$( "#result" ).html( "Email sended to: " + data + "<br>");
});
}, <?php echo $wait; ?>); //printing 5000, 10000, 15000, etc...
</script>
<?PHP
}
?>
对于第二个问题,您只需使用 jQuey.append功能:
而不是 $("#result").html("Email sended to: " + data + "<br>");
使用$("#result").append("Email sended to: " + data + "<br>");
观察:
我知道这不是重点,但我认为值得注意的是:您的代码似乎非常不安全,因为客户端脚本能够使您的服务器发送电子邮件,并且似乎没有身份验证方法正在使用,因为 ajax 请求只是发送电子邮件和一些“时间”...
关于PHP - jQuery - 发送大量电子邮件 - 每 5 秒 1 封电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27460398/