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