PHP - отправка писем каждому пользователю с определенным идентификатором - PullRequest
0 голосов
/ 03 мая 2020

В настоящее время я могу отправлять электронные письма каждому пользователю в базе данных с определенным идентификатором, но для запуска функции требуется некоторое время, и поэтому заставляет браузер ждать, пока она не завершится.

Is есть способ запустить функцию отправки электронной почты где-то еще и переместить страницу, чтобы пользователю не приходилось ждать.

Это проблема, потому что, если есть много пользователей, чтобы отправлять электронную почту тоже , тогда этот процесс может занять слишком много времени и пользователь будет ждать так же долго.

Мой текущий код выглядит следующим образом.

{

$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;
}

}

1 Ответ

1 голос
/ 03 мая 2020

Создание задания cron - это то, что вам нужно для такого рода вещей, в основном, на вашем сервере выполняется фоновый процесс, с помощью которого вы можете вызывать функцию в любое время. Вы можете сохранить данные своей электронной почты в базе данных в виде таблицы, вместо того, чтобы отправлять каждое электронное письмо для каждого пользователя и позволить пользователю продолжать то, что он делает, затем с помощью задания cron вызвать функцию php для go через в этой таблице опустите детали электронного письма и отправьте их.

Итак, в конечном итоге вы можете написать задание cron, которое будет запускаться каждые 5 минут для вызова ссылки sendEmails, которая будет запускать нужный вам процесс .

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