PHP Mail Service循环将邮件发送给每个人。如何避免呢?

对于我的网页,我有一个php邮件服务,可让我通过发送邮件


EmailService::getService()->sendEmail($email, $first_name, $subject, $body);

除非我将此行放入循环中,例如,通知所有列出的管理员,否则此方法工作正常:


$sql = "SELECT * FROM admin_notifications";

$result = mysqli_query($con, $sql);

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

    EmailService::getService()->sendEmail($row['email'], $row['first_name'], $subject, $body);

}

现在,每个管理员都会收到每封邮件。例如,如果有3个管理员,则每个管理员都会收到3个不同的邮件。该服务似乎分别向每个接收者发送3封邮件。


由于我没有实现邮寄服务本身,并且因为我不完全了解它,所以我真的不知道从哪里开始寻找此错误。


也许有人在这里有建议吗?


这是邮件服务的代码:


<?php


    /*Verschickt Emails*/

    use TijsVerkoyen\CssToInlineStyles\CssToInlineStyles;


    use PHPMailer\PHPMailer\PHPMailer;

    use PHPMailer\PHPMailer\Exception;


    class EmailService{

        /**

        * instance

        *

        * Statische Variable, um die aktuelle (einzige!) Instanz dieser Klasse zu halten

        *

        * @var Singleton

        */

       protected static $_instance = null;

       protected $mail;


       /**

        * get service

        *

        * Falls die einzige Service-Instanz noch nicht existiert, erstelle sie

        * Gebe die einzige Service-Instanz dann zurück

        *

        * @return   Singleton

        */

       public static function getService()

       {

           if (null === self::$_instance)

           {

               self::$_instance = new self;

           }

           return self::$_instance;

       }


       /**

        * clone

        *

        * Kopieren der Service-Instanz von aussen ebenfalls verbieten

        */

       protected function __clone() {}


       /**

        * constructor

        *

        * externe Instanzierung verbieten

        */

       protected function __construct() {

           //new PHPMailerAutoload();

           $this->mail = new PHPMailer();


    

梵蒂冈之花
浏览 153回答 2
2回答

慕莱坞森

您每次在循环中都使用相同的实例,每次调用sendEmail()它都会为实例添加地址。您可以每次创建一个新实例,而不是调用getService(),它将重新启动。while($row = mysqli_fetch_assoc($result)){&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; $mailer = new EmailService;&nbsp;&nbsp;&nbsp; &nbsp; $mailer->sendEmail($row['email'], $row['first_name'], $subject, $body);}
打开App,查看更多内容
随时随地看视频慕课网APP