PHP - jQuery - 发送群发电子邮件 - 每 5 秒 1 封电子邮件


PHP - jQuery - Sending mass emails - 1 email per 5 seconds

我正在开发一个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 秒,然后它会像即时一样匆忙发送电子邮件。

  1. 如何使此脚本每 1 秒发送 5 封电子邮件,直到发送所有电子邮件?
  2. 如何使此脚本在 1 行上显示 1 个结果,然后在下面显示下一个结果,依此类推?现在脚本正在打印:Email sended 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 请求只是发送电子邮件和一些"时间"......