PHP-向每个具有特定id的用户发送电子邮件

PHP-向每个具有特定id的用户发送电子邮件,php,phpmailer,Php,Phpmailer,目前,我可以用某个id向数据库中的每个用户发送电子邮件,但该功能需要一段时间才能运行,因此浏览器需要等待它完成 是否有办法让电子邮件发送功能在其他地方运行,并让页面移动,这样用户就不必等待 这是一个令人担忧的问题,因为如果有很多用户也要发送电子邮件,那么这个过程可能会花费太长的时间,让用户等待的时间也一样长 我目前的代码如下 { $sql_query = "SELECT * FROM `influencers` WHERE `brand_id` = $brand_id"; $i = 0; $q

目前,我可以用某个id向数据库中的每个用户发送电子邮件,但该功能需要一段时间才能运行,因此浏览器需要等待它完成

是否有办法让电子邮件发送功能在其他地方运行,并让页面移动,这样用户就不必等待

这是一个令人担忧的问题,因为如果有很多用户也要发送电子邮件,那么这个过程可能会花费太长的时间,让用户等待的时间也一样长

我目前的代码如下

{

$sql_query = "SELECT * FROM `influencers` WHERE `brand_id` = $brand_id";
$i = 0;
$queryResult = mysqli_query($conn, $sql_query);
while($i<mysqli_num_rows($queryResult) ) {
    $inf_info = mysqli_fetch_assoc($queryResult);
    $brand = mysqli_fetch_assoc(mysqli_query($conn, "SELECT * FROM `brands` WHERE `id` = '$brand_id'"));
    $mail = new PHPMailer();
    $mail->isSMTP();
    $mail->Host = "smtp.gmail.com";
    $mail->SMTPAuth = true;
    $mail->Username = 'PLACEHOLDEREMAIL@gmail.com';
    $mail->Password = 'PLACEHOLDERPASSWORD';
    $mail->SMTPSecure = "ssl";
    $mail->Port = 465;
    $mail->SetFrom(EMAIL_USERNAME, "Support");
    $mail->addAddress($inf_info['email'], $inf_info['first_name'] . " " . $inf_info['last_name']);
    $mail->Subject = "Your insider brand has started an internal campaign!";
    $mail->isHTML();
    $mail->Body = "
        Greetings influencer! We want to let you know that that your insider brand, " . $brand['name'] . ",<br><br>

        Has started a new insider campaign.<br><br>

        If you wish to not participate, simply ignore this email.<br><br>

        Sincerely,<br><br>

        The Crowdfluence Team
    ";
    // Check if email was sent successfully
    if ($mail->send()){
        unset($mail);
    }else{
        unset($mail);
    }
    $i +=1;
}

}
{
$sql\u query=“从`influencers`中选择*,其中`brand\u id`=$brand\u id”;
$i=0;
$queryResult=mysqli\u查询($conn,$sql\u查询);
而($iisSMTP();
$mail->Host=“smtp.gmail.com”;
$mail->SMTPAuth=true;
$mail->Username=PLACEHOLDEREMAIL@gmail.com';
$mail->Password='PLACEHOLDERPASSWORD';
$mail->SMTPSecure=“ssl”;
$mail->Port=465;
$mail->SetFrom(EMAIL_用户名,“Support”);
$mail->addAddress($inf_info['email'],$inf_info['first_name']。“.$inf_info['last_name']);
$mail->Subject=“您的内部品牌已开始内部活动!”;
$mail->isHTML();
$mail->Body=”
您好,影响者!我们想让您知道您的内部品牌,“.$brand['name']”,

已开始新的内部活动。

如果您不想参与,请忽略此电子邮件。

真诚地,

众注团队 "; //检查电子邮件是否已成功发送 如果($mail->send()){ 未结算($邮件); }否则{ 未结算($邮件); } $i+=1; } }
创建电子邮件是这类事情所需要的,基本上是在服务器上运行一个后台进程,您可以随时调用该进程。您可以将电子邮件的详细信息保存到数据库中的一个表中,而不是为每个用户发送每封电子邮件,并让用户继续他们正在做的事情使用cron作业调用php函数遍历该表,下拉电子邮件的详细信息并发送它们

因此,您最终可能要做的是编写一个cron作业,每5分钟运行一次,以调用sendEmails链接,该链接将运行您需要的流程

*/5 * * * * wget http://example.com/sendEmails

这是正确的答案,但cron作业应引用同一服务器上的本地文件,而不是本地文件的HTTP地址。不使用HTTP具有某些优势,但会带来一些额外的复杂性。无论如何,它需要某种事务控制来防止同一作业同时运行。这不是修复此问题的唯一方法问题。如果您采用这种方法,我建议您确保
http://example.com/sendEmails
只能通过在同一封电子邮件中密件抄送多个收件人的方式从LocalHost访问,您还可以在脚本上获得更快的周转时间,就像对工作负载进行分片/并行化一样。