此代码发送了两次最后一封电子邮件行的错误是什么?使用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.');
}
答案 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变量,最后我检查尝试发送的电子邮件数量是否等于成功发送消息的数量。