Расширение yii и Swift Mailer отправляют последнюю строку электронной почты дважды - PullRequest
0 голосов
/ 18 марта 2012

Что не так с этим кодом, который отправляет последнюю строку электронной почты дважды?Использование 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 Ответ

1 голос
/ 18 марта 2012

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

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, только если сообщение было отправленоконец Я проверяю, равняется ли количество попыток отправки электронных писем количеству успешно отправленных сообщений.

...