phpmail отправляет 4 письма вместо 1 - PullRequest
1 голос
/ 15 апреля 2020

[! [РАБОТАЕТ, НО ПОКАЗЫВАЕТ ВСЕ ПОЧТЫ НА КАЖДУЮ ПОЧТУ] [1]] [1] У меня есть сценарий php, который должен отправлять администратору письмо при ответе пользователя на сообщения. Это работает нормально, но отправляет 4 письма одновременно и для одной и той же почты для одной и той же записи вместо отправки 1 письма с использованием phpmailer для отправки писем

    $mail = new PHPMailer;
    $mail->isSMTP();
    $mail->SMTPDebug = 2;
    $mail->Host = 'smtp.hostinger.com';
    $mail->Port = 587;
    $mail->SMTPAuth = true;
    $mail->Username = 'noreply@joint2purchase.com';
    $mail->Password = 'manjunath123M';
    $mail->setFrom('noreply@joint2purchase.com', 'admin joint2purchase');

     $stmt = $db->query('SELECT USERNAME,EMAIL FROM MEMBERS LIMIT 100');
    //for each email add a recipient
    while($row3 = $stmt->fetch()){
        $toname = $row3['USERNAME'];
        $tomail = $row3['EMAIL'];
        $mail->addAddress($tomail);
    }

    //build the rest email (html, attaches, etc)
    $mail->isHTML(true);                                  // Set email format to HTML
    $mail->Subject = 'created new thread';
    $mail->Body    = '<html> 
    <head> 
        <title>Admin Started with You : '.$name.' </title> 
    </head> 
    <body> 
        <h1>Thanks you for joining with us!</h1> 
        <table cellspacing="0" style="border: 2px solid #202020; height: 60%; width: 100%;"> 
            <tr style="background-color:lightblue;"> 
                <th>Joint2Purchase</th> 
            </tr> 
            <br/> <br/>
            <tr style="background-color: white;"> 
                <th>'.$toname.', started a new conversation with you at Joint2Purcahse.  </th> 
            </tr> 
            <tr> 
                <th style="color:skyblue; font-size:30px; font-family:calibri; font-weight:boldder; border-bottom:1px solid skyblue;"> '.$name.'</th> 
            </tr>

            <tr style="height:70px;"> 
               <br/> <a href="joint2purchase.com/viewthread.php?id='.$example.'">View Conversation</a></th> 
            </tr>
        </table> 
    </body> 
    </html>';
    $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
    $mail->addAttachment('test.txt');
    if (!$mail->send()) {
        echo 'Mailer Error: ' . $mail->ErrorInfo;
    } else {
        echo 'The email message was sent.';
    }```


[![enter image description here][2]][2]


  [1]: https://i.stack.imgur.com/q5K06.png
  [2]: https://i.stack.imgur.com/hIJdZ.png

Ответы [ 3 ]

1 голос
/ 16 апреля 2020

1-й) вы выполняете запрос (последний), что вы получаете поле «EMAIL» в $ to, и после этого вы не используете его в своей структуре почты !!! Так что бесполезный запрос

2-й) у вас есть почтовый код внутри al oop

while($row3 = $stmt->fetch()){

для каждой получаемой вами записи. Так что, если последний запрос вернет 3, 4 или 100 записей, вы отправите одинаковое количество писем !!

0 голосов
/ 17 апреля 2020

Это отправляет одно и то же письмо многим получателям

    //Set the mailer hadle

    require 'vendor/autoload.php';
    $mail = new PHPMailer;
    $mail->isSMTP();
    $mail->SMTPDebug = 2;
    $mail->Host = 'smtp.hostinger.com';
    $mail->Port = 587;
    $mail->SMTPAuth = true;
    $mail->Username = 'filip@joint2purchase.com';
    $mail->Password = 'filip321';
    $mail->setFrom('filip@joint2purchase.com', 'Client Filip');

    //get the administrators emails
    $stmt = $db->prepare('SELECT USERNAME,EMAIL,TYPE FROM MEMBERS WHERE TYPE = :T LIMIT 100');
    $stmt->execute(array(':T' => 'ADMINISTRATOR'));

    //for each email add a recipient
    while($row3 = $stmt->fetch()){
        $toname = $row3['USERNAME'];
        $tomail = $row3['EMAIL'];

//*************************************************
//So you have to use bcc (blind carbon copy)
//COMMENT THE NEXT LINE
        //$mail->addAddress($tomail, $toname);
//ADD THIS LINE
        $mail->AddBCC($tomail, $toname);
//*************************************************
    }

    //build the rest email (html, attaches, etc)
    $mail->isHTML(true);                                  // Set email format to HTML
    $mail->Subject = 'Here is the subject';
    $mail->Body    = 'This is the HTML message body <b>in bold!</b>';
    $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
    $mail->addAttachment('test.txt');
    if (!$mail->send()) {
        echo 'Mailer Error: ' . $mail->ErrorInfo;
    } else {
        echo 'The email message was sent.';
    }
0 голосов
/ 16 апреля 2020

вот так:

//comment this line/ $stmt = $db->prepare('SELECT USERNAME,EMAIL,TYPE FROM MEMBERS WHERE TYPE = :T LIMIT 100');
//comment this line/ $stmt->execute(array(':T' => 'ADMINISTRATOR'));
//comment this line/ while($row3 = $stmt->fetch()){

 $to = $row3['EMAIL'];

require 'vendor/autoload.php';
$mail = new PHPMailer;
$mail->isSMTP();
$mail->SMTPDebug = 2;
$mail->Host = 'smtp.hostinger.com';
$mail->Port = 587;
$mail->SMTPAuth = true;
$mail->Username = 'filip@joint2purchase.com';
$mail->Password = 'filip321';
$mail->setFrom('filip@joint2purchase.com', 'Client Filip');
//comment this line/ $mail->addReplyTo('manubmhegde@gmail.com', 'Client Filip');
$mail->addAddress('manubmhegde@gmail.com', 'Receiver Name');
 $mail->isHTML(true);                                  // Set email format to HTML
    $mail->Subject = 'Here is the subject';
    $mail->Body    = 'This is the HTML message body <b>in bold!</b>';
    $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
//$mail->addAttachment('test.txt');
if (!$mail->send()) {
    echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
    echo 'The email message was sent.';
}
//comment this line/ }

и вы отправляете только одно электронное письмо

...