2012-03-18 124 views
0

這段代碼發送最後一封電子郵件行兩次有什麼問題?使用Yii和斯威夫特梅勒擴展yii和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 2012-03-18 17:32:59