2012-03-18 2 views
0

Что не так с этим кодом, который отправляет последнюю строку адреса дважды? Использование Yii и расширения Swift Maileryii и Swift Расширение Mailer, отправляющее последнюю строку электронной почты дважды

  $emails = Newsletter::model()->findAll(); 
      if ($emails) { 
       $sent = 0; 
       foreach ($emails as $row) { 
        $secret = $this->createAbsoluteUrl('/site/newsletter/unsubscribe?s='.$row->secret.''); 
        $email = new YiiMailMessage(); 
        $email->setBody($model->body.'<br /><br /><small>Se você não deseja mais receber nossos e-mails,</small> <a style="color:#336699;" href="'.$secret.'">clique aqui</a>', 'text/html', 'utf-8'); 
        $email->addTo($row->email); 
        $email->from = Yii::app()->config->get('from_email'); 
        $email->setSubject($model->subject); 
        Yii::app()->mail->send($email); 
        $sent++; 
       } 
       if (!Yii::app()->mail->send($email)) { 
        Yii::app()->user->setFlash('error', 'Não conseguiu enviar mensagem'); 
       } 
       Yii::app()->user->setFlash('success', ''.$sent.' E-mails enviados com sucesso.'); 
      } else { 
       Yii::app()->user->setFlash('error', 'Não há assinantes de enviar a newsletter para.'); 
      } 

ответ

1

Проблемой является следующей строкой:

if (!Yii::app()->mail->send($email)) { 

Здесь вы отправляете последнее сообщение снова и вы проверяете только, если это последняя попытка была успешной, не все , Я не уверен, что именно вам нужно дело даже не может перевести сообщение об ошибке, но он будет работать как шарм:

$emails = Newsletter::model()->findAll(); 
if ($emails) { 
    $sent = 0; 
    foreach ($emails as $row) { 
     $secret = $this->createAbsoluteUrl('/site/newsletter/unsubscribe?s='.$row->secret.''); 
     $email = new YiiMailMessage(); 
     $email->setBody($model->body.'<br /><br /><small>Se você não deseja mais receber nossos e-mails,</small> <a style="color:#336699;" href="'.$secret.'">clique aqui</a>', 'text/html', 'utf-8'); 
     $email->addTo($row->email); 
     $email->from = Yii::app()->config->get('from_email'); 
     $email->setSubject($model->subject); 
     if (Yii::app()->mail->send($email)) $sent++; 
    } 
    if ($sent != count($emails)) { 
     Yii::app()->user->setFlash('error', 'Não conseguiu enviar mensagem'); 
    } 
    Yii::app()->user->setFlash('success', ''.$sent.' E-mails enviados com sucesso.'); 
} else { 
    Yii::app()->user->setFlash('error', 'Não há assinantes de enviar a newsletter para.'); 
} 

Здесь я приращением $ отправить переменную только если сообщение было отправлено и в конце концов я проверьте, было ли количество попыток отправки электронной почты равным количеству успешно отправленных сообщений.

+0

спасибо. он работает сейчас, как ожидалось. – memo

Смежные вопросы