Yii2 swiftmailer foreach 多个电子邮件

Yii2 swiftmailer foreach multiple email

我想要运行一个代码来向所有用户发送电子邮件。起初我用这个代码来运行一个测试。

->setTo([
                'john.doe@gmail.com' => 'John Doe',
                'jane.doe@gmail.com' => 'Jane Doe',
        ])

我发现邮件是发送给多个收件人的 1 封邮件,而我需要将 2 封邮件发送给 2 个收件人。因为实际上我需要一次发送给一百多人。所以我尝试 foreach 循环。

   public function contact($email)
    {
        $users = Users::find()->all();
        $content = $this->body;
    foreach($users as $user){
        if ($this->validate()) {
            Yii::$app->mailer->compose("@app/mail/layouts/html", ["content" => $content])

                ->setTo($user->email)
                ->setFrom($email)
                ->setSubject($user->fullname . ' - ' . $user->employee_id . ': ' . $this->subject)
                ->setTextBody($this->body)
                ->send();

            return true;
        }
    }
        return false;

    }

但它只 运行 1 循环和结束。 请告诉我哪里错了。 谢谢

只发送一封邮件的原因是

return true

在第一封电子邮件发送后 return 秒,您应该像下面那样使用 try{}catch(){}

public function contact($email) {
        $users = Users::find()->all();
        $content = $this->body;

        try {
            foreach ($users as $user) {
                if ($this->validate()) {
                    $r = Yii::$app->mailer->compose("@app/mail/layouts/html", ["content" => $content])
                            ->setTo($user->email)
                            ->setFrom($email)
                            ->setSubject($user->fullname . ' - ' . $user->employee_id . ': ' . $this->subject)
                            ->setTextBody($this->body)
                            ->send();
                    if (!$r) {
                        throw new \Exception('Error sending the email to '.$user->email);
                    }
                }
            }
            return true;
        } catch (\Exception $ex) {
            //display messgae
            echo $ex->getMessage();
            //or display error in flash message
            //Yii::$app->session->setFlash('error',$ex->getMessage());
            return false;
        }
    }

您可以在 catch 部分 return false 或 return 错误消息而不是 returning false 并且在哪里调用 contact 函数时,请按以下方式检查它。

if(($r=$this->contact($email))!==true){
    //this will display the error message
    echo $r;
}