Почему программа посылает почту адресату многообразные разы в функции в стоимость X?

Когда он вводит цикл for, программа посылает ему единственную почту в первое положение arrelgo $lista, потом, когда цикл повторяется во второй раз, программа посылает сообщение два раза на почту в 2-ом положении договоренности. Когда входит из-за 3era раз в цикл, программа посылает 3 сообщения почте в ней 3era положение договоренности. Он спрашивает у меня, что он потому что? Здесь я оставляю им код

<?php
$asunto = $_POST["asunto"];
$mensaje = $_POST["mensaje"];
$lista = array("gerardo.topete@outlook.com","gerardotopete7@gmail.com","suscripcion.punkconleche@gmail.com");
$i = count($lista);

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require 'PHPMailer/Exception.php';
require 'PHPMailer/PHPMailer.php';
require 'PHPMailer/SMTP.php';

// Instantiation and passing `true` enables exceptions
$mail = new PHPMailer(true);


for($x = 0; $x < $i; $x++){
    try {
        //Server settings
        $mail->SMTPDebug = 0;                                       // Enable verbose debug output
        $mail->isSMTP();                                            // Set mailer to use SMTP
        $mail->Host       = 'smtp.gmail.com';                       // Specify main and backup SMTP servers
        $mail->SMTPAuth   = true;                                   // Enable SMTP authentication
        $mail->Username   = '********';   // SMTP username
        $mail->Password   = '********';                         // SMTP password
        $mail->SMTPSecure = 'tls';                                  // Enable TLS encryption, `ssl` also accepted
        $mail->Port       = 587;                                    // TCP port to connect to

        //Recipients
        $mail->setFrom('suscripcion.punkconleche@gmail.com');
        $mail->addAddress($lista[$x]);     // Add a recipient

        // Content
        $mail->isHTML(true);                                       // Set email format to HTML
        $mail->Subject = $asunto;
        $mail->Body    = $mensaje;

        $mail->send();
        echo 'Tu correo se ha enviado';
    } catch (Exception $e) {
        echo 'Error al intentar suscribirte: ', $mail->ErrorInfo;
    }
}
?>
1
задан 06.11.2019, 19:26
1 ответ

Ошибка проистекает того, что каждый раз, когда он называется в mГ©todo addAddress() присоединяется новый адресат ( To: ), но закончив каждый цикл, ты это не удаляешь.

А именно, закончив цикл n, в списке адресатов tendrГЎs n адресатов и в адресата в ней posiciГіn x он habrГЎs посланник n - x mails.

MГЎs grГЎficamente serГ - в:

// $x = 0
addAddress(mail1);
send();            // [mail1] destinatario

В prГіximo цикл:

// $x = 1
addAddress(mail2);
send();            // [mail1, mail2] destinatarios

, Поскольку возможно видеть, в mail1 он envГ - или 2 раз ( в первой и во втором раунде ).
И asГ - последовательно до тех пор, пока $x < $i

SoluciГіn:

DeberГ-Схвати призывать clearAddresses() удалять все адресаты, которые были атташе. Пример:

    //... código anterior
    $mail->send();
    $mail->clearAddresses();
    //...
0
ответ дан 01.12.2019, 12:30

Теги

Похожие вопросы