为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
梵蒂冈之花 2021-04-29 14:12:52
对于我的网页,我有一个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();    
查看完整描述

2 回答

?
慕莱坞森

TA贡献1810条经验 获得超4个赞

您每次在循环中都使用相同的实例,每次调用sendEmail()它都会为实例添加地址。


您可以每次创建一个新实例,而不是调用getService(),它将重新启动。


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

    $mailer = new EmailService;  

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

}


查看完整回答
反对 回复 2021-05-14
  • 2 回答
  • 0 关注
  • 149 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信