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;
}
我想要运行一个代码来向所有用户发送电子邮件。起初我用这个代码来运行一个测试。
->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;
}