2012-03-18 127 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