предотвратить дублирование при отправке электронной почты php mysql - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть такой случай,

Я хочу запустить localhost: 88 / run_email.php и отправить данные из каждой строки на адрес электронной почты, указанный в строке, используя phpmailer

id | tools | model | sn | expiration_date | user_email | desc | date_modified

-----------------------------------------------------------------------------
12 | a1 | b | c | 2018-04-23 | email_1st@yahoo.com | status | 2018-04-25 17:53:48

22 | b2 | f | r | 2018-04-24 | email_2nd@gmail.com | contact221 | 2018-04-25 17:53:50

32 | d3 | e | lll | 2018-04-24 | email_3rd@gmail.com | 12 | 2018-04-25 17:53:52

42 | f4 | l | h | 2018-04-24 | email_4th@gmail.com | \N | 2018-04-25 17:53:56

52 | 9JJ5 | QW | NA | 2018-04-25 | email_5th@company.com | \N | 2018-04-25 17:53:58

Например, если я отправлю email_1st@yahoo.com

, он получит id = 12 | tools = a1 | model= b | sn = c | expiration_date = 2018-04-23

Мой текущий код -

    <?php
    require_once "vendor/autoload.php";
    require("vendor/phpmailer/phpmailer/src/PHPMailer.php");
    require("vendor/phpmailer/phpmailer/src/SMTP.php");

    //PHPMailer Object
    $mail = new PHPMailer\PHPMailer\PHPMailer();

    $mail->isSMTP();                                      // Set mailer to use SMTP
    $mail->Host = 'ssl://smtp.googlemail.com';  // Specify main and backup SMTP servers
    $mail->SMTPAuth = true;                               // Enable SMTP authentication
    $mail->Username = 'email@email.com';                 // SMTP username
    $mail->Password = 'pwd';  
    $mail->Port = 465;                         // SMTP password
    $mail->SMTPSecure = 'tls';   

    $DB_host     = 'localhost';
    $DB_user     = 'root';
    $DB_password = '';
    $DB_name     = 'sent_email';

    $link = mysql_connect($DB_host, $DB_user, $DB_password);
    if (!$link) {
        die ('Failed to connect: ' . mysql_error());
    }

    $db_selected = mysql_select_db($DB_name, $link);
    if (!$db_selected) {
        die ("Db errorr: " . mysql_error());
    }
        // sending query
        $result = mysql_query("SELECT id,tools,model,sn,expiration_date,user_email FROM `table` ");
        if (!$result) {
            die("Query to show fields from table failed");
        }
        $num_rows = mysql_num_rows($result);


    $mail->From = "email@email.com";//from dari Username
    $mail->FromName = "For Looping";
    $mail->addReplyTo("no-N-reply@email.com", "...loop ");
    $mail->isHTML(true);
    $mail->Subject = "loop";


                for($i=1;$i<=$num_rows;$i++){
                    $row = mysql_fetch_array($result);
                    $line[$i][5] = $row['user_email'];
                    echo "No. ".$i."is ".$line[$i][5]."<br>";
                                    $mail->addAddress($line[$i][5]);

                                    $mail->Body = "<i>".$line[$i][5]."</i>";


                                    if(!$mail->send()) 
                                    {
                                        echo "Mailer Error: " . $mail->ErrorInfo;
                                    } 
                                    else 
                                    {
                                        echo "Message has been sent successfully <br>";
                                    }
                }

Результат, как показано ниже для результата цикла:

sent to 1 email_1st@yahoo.com
    There is 5 inbox to email_1st@yahoo.com like below
    email ke 1- email_1st@yahoo.com
    email ke 2- email_1st@yahoo.com, email_2nd@gmail.com
    email ke 3- email_1st@yahoo.com, email_2nd@gmail.com,email_3rd@gmail.com
    email ke 4- email_1st@yahoo.com, email_2nd@gmail.com,email_3rd@gmail.com,email_4th@gmail.com
    email ke 5- email_1st@yahoo.com, email_2nd@gmail.com,email_3rd@gmail.com,email_4th@gmail.com,email_5th@company.com

sent to 2 email_2nd@gmail.com
    There is 4 inbox to email_2nd@gmail.com like below
    email ke 1- email_1st@yahoo.com, email_2nd@gmail.com
    email ke 2- email_1st@yahoo.com, email_2nd@gmail.com,email_3rd@gmail.com
    email ke 3- email_1st@yahoo.com, email_2nd@gmail.com,email_3rd@gmail.com,email_4th@gmail.com
    email ke 4- email_1st@yahoo.com, email_2nd@gmail.com,email_3rd@gmail.com,email_4th@gmail.com,email_5th@company.com

sent to 3 email_3rd@gmail.com
    There is 3 inbox to email_3rd@gmail.com like below
    email ke 1- email_1st@yahoo.com, email_2nd@gmail.com,email_3rd@gmail.com
    email ke 2- email_1st@yahoo.com, email_2nd@gmail.com,email_3rd@gmail.com,email_4th@gmail.com
    email ke 3- email_1st@yahoo.com, email_2nd@gmail.com,email_3rd@gmail.com,email_4th@gmail.com,email_5th@company.com

sent to 4 email_4th@gmail.com
    There is 2 inbox to email_4th@gmail.com like below
    email ke 1- email_1st@yahoo.com, email_2nd@gmail.com,email_3rd@gmail.com,email_4th@gmail.com
    email ke 2- email_1st@yahoo.com, email_2nd@gmail.com,email_3rd@gmail.com,email_4th@gmail.com,email_5th@company.com

sent to 5 email_5th@company.com
    There is 1 inbox to email_4th@gmail.com like below
    email ke 1- email_1st@yahoo.com, email_2nd@gmail.com,email_3rd@gmail.com,email_4th@gmail.com,email_5th@company.com

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

С уважением.

1 Ответ

0 голосов
/ 26 апреля 2018

Я понял, в этом блоке

else 
{
echo "Message has been sent successfully <br>";
}

Добавлена ​​команда $ mail-> ClearAddresses ();$ Mail-> ClearAllRecipients ();как,

else 
{
echo "Message has been sent successfully <br>";
$mail->ClearAddresses(); 
$mail->ClearAllRecipients();
}

Мы можем обсудить, если у вас все еще есть какие-либо проблемы, зависит от этого

...