yii和Swift Mailer扩展程序两次发送最后一封电子邮件行

时间:2012-03-18 07:42:50

标签: yii swiftmailer

此代码发送了两次最后一封电子邮件行的错误是什么?使用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 个答案:

答案 0 :(得分: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.');
}

这里我只在发送消息时才增加$ send变量,最后我检查尝试发送的电子邮件数量是否等于成功发送消息的数量。