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



这段代码两次发送最后一封电子邮件有什么问题?使用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.');
            }

问题是以下字符串:

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变量,最后我检查尝试发送的电子邮件数量是否等于成功发送的消息数量。

最新更新