public function send(array $events) { $eventsCount = count($events); if ($eventsCount == 0) { return; } $mailer = Yii::app()->mailer; $mailer->init(); for ($i = 0; $i < $eventsCount; $i++) { $curEvent = $events[$i]; $mailAccount = $curEvent->eventType->mailAccount; $mailerTransport = $mailer->getTransport()->setHost($mailAccount->host); if ($mailAccount->getIsNeedAuthorize()) { //нужна авторизация на сервере $mailerTransport->setUsername($mailAccount->user_name)->setPassword($mailAccount->user_password); } else { $mailerTransport->setUsername(null)->setPassword(null); } $eventsProcess = $curEvent->getEventsProcess(); $eventsProcessCount = count($eventsProcess); for ($k = 0; $k < $eventsProcessCount; $k++) { $curEventProcess = $eventsProcess[$k]; $mailMessage = new YiiMailMessage(); $mailMessage->setTo($curEventProcess->email); $mailMessage->setSubject($curEvent->subject); $messageContent = ''; if ($curEvent->event_message === null) { $ncEvent = new NotifierComponentEvent($this, $curEvent, $curEventProcess, $mailMessage); $this->onEmptyMessage(new NotifierComponentEvent($this, $curEvent, $curEventProcess, $mailMessage)); if ($mailMessage->getBody() == null && empty($ncEvent->params['messageContent'])) { $curEventProcess->saveAsSent(); continue; } elseif (!empty($ncEvent->params['messageContent'])) { $messageContent = $ncEvent->params['messageContent']; } } else { $messageContent = $curEvent->event_message; } if ($mailMessage->getFrom() == null) { //если не указан отправитель, то берем из настроек аккаунта if (!empty($mailAccount->from_name)) { $mailMessage->setFrom(array($mailAccount->email_from => $mailAccount->from_name)); } else { $mailMessage->setFrom($mailAccount->email_from); } } //если тема не указана, то в качестве темы устанавливаем название типа события if ($mailMessage->getSubject() == null) { $mailMessage->setSubject($curEvent->eventType->name); } //Если есть что прикреплять if (!empty($messageContent)) { $eventFormat = $curEventProcess->eventSubscriber->eventFormat; switch ($eventFormat->place) { case NotifierEventFormat::PLACE_TEXT: $mailMessage->setBody($messageContent, $eventFormat->name == NotifierEventFormat::TYPE_HTML ? 'text/html' : 'text/plain'); break; case NotifierEventFormat::PLACE_ATTACHMENT: $fileName = $eventFormat->file_name; if ($curEventProcess->eventSubscriber->getIsArchiveAttachment()) { //TODO Архивируем вложение } //TODO Добавляем файл в аттач break; } } if (!$this->onBeforeSend(new NotifierComponentEvent($this, $curEvent, $curEventProcess, $mailMessage))) { continue; } $errorMessage = false; try { if ($mailer->send($mailMessage, $failures)) { $curEventProcess->saveAsSent(); } else { $errorMessage = sprintf("Ошибка при отправке почты:\n %s", print_r($failures, true)); } } catch (Exception $e) { $errorMessage = $e->getMessage(); } if ($errorMessage) { Yii::log($errorMessage, CLogger::LEVEL_ERROR, 'mail.notifier.send'); } } // endfor $eventProcess } // endfor $events }