使用PHP MAILER发送电子邮件时出错

使用PHP MAILER发送电子邮件时出错,php,Php,我有一个数据库,有一个名为mailing_list的表,它有三列first_name、last_name和email。这张桌子有两个人 第一个名字是:x1,姓氏是:y1,电子邮件是:x1@yahoo.com 第二个名字是:x2姓氏是:y2,电子邮件是:x2@yahoo.com 我正在尝试使用PHP Mailer,代码如下,发生的情况是x1收到相同的电子邮件两次,一次是“亲爱的x1 y1”,第二次是“亲爱的x2 y2”。第二个名字x2是一次,这很好。我不希望同一封电子邮件发送给这个人不止一次,我知

我有一个数据库,有一个名为mailing_list的表,它有三列first_name、last_name和email。这张桌子有两个人 第一个名字是:x1,姓氏是:y1,电子邮件是:x1@yahoo.com 第二个名字是:x2姓氏是:y2,电子邮件是:x2@yahoo.com 我正在尝试使用PHP Mailer,代码如下,发生的情况是x1收到相同的电子邮件两次,一次是“亲爱的x1 y1”,第二次是“亲爱的x2 y2”。第二个名字x2是一次,这很好。我不希望同一封电子邮件发送给这个人不止一次,我知道loop有问题。有什么帮助吗?? sendmail.php页面

 <?php
    require("config.php");

    if(isset($_POST['submit']))
    {

        require("class.phpmailer.php"); 
        $mail = new PHPMailer();        

        $query = "SELECT * FROM mailing_list";
        $result = mysqli_query($connect, $query)    
        or die('Error querying the database!');


            $mail->IsSMTP(); 
            $mail->Host="smtp.gmail.com";       
            $mail->Username="myEmailAdd"; 
            $mail->Password="myPassWord"; //SMTP_PASS;
            $mail->SMTPAuth=true;
            $mail->SMTPSecure = 'tls'; 
            $mail->From ="myEmailAdd";  
            $mail->FromName ="CSCA";    

        while($row = mysqli_fetch_array($result))
        {

            $first_name = $row['first_name'];
            $last_name = $row['last_name'];
            $to = $row['email'];

            $mail->AddAddress($to); 


            $mail->Subject= $_POST['subject'];

            $mail->Body = "Dear $first_name $last_name,\n" . $_POST['body'];
            $mail->WordWrap = 50;

            if(!$mail->Send()) 
            {
                echo 'Message was not sent.';
                echo 'Mailer error: ' . $mail->ErrorInfo;
            } 
            else 
            {
                echo 'Message has been sent.';
                echo 'Email sent to ' . $to . '<br/>';
            }           

        }

        mysqli_close($connect); 
    }   
    ?>

这是电子邮件表格

<body>
    <form method="post" action="sendemail.php">
            <label for="subject">Subject of email:</label><br/>
            <input type="text" id="subject" name="subject" size="60"/><br/>
            <label for="body">Body of mail:</label><br/>
            <textarea id="body" name="body" rows="8" cols="60"></textarea><br/>
            <input type="submit" name="submit" value="Submit"/>             
    </form>
</body>

电子邮件主题:

正文:


AddAddress
方法只是将另一个收件人的电子邮件地址添加到已经存在的电子邮件地址中,因此当您在循环中使用
AddAddress
时,第一个收件人第二次收到电子邮件是合乎逻辑的


在使用
AddAddress
添加地址之前,只需在循环中调用
clearAddresses
方法即可–这将清除当前接收电子邮件地址列表,并为您提供一个“新的开始”,这样添加的下一个地址将是当前发送邮件的唯一接收电子邮件地址。

当然会发生这种情况,因为您正在循环中使用
AddAddress
方法。改用一种方法,只需将单个
地址设置为:
地址,而不是添加多个收件人。我无法找到一种明确的方法在文档中一眼就能将单个
地址添加到:
地址(这样做时也会清除以前的地址)——但有一种
清除地址的方法,因此,在循环中的
AddAddress
之前调用它,它应该可以正常工作。如果您愿意阅读关于类方法的手册,您将不需要询问。非常感谢@CBroe!