* @since 2.0 */ class EmailTarget extends Target { /** * @var array the configuration array for creating a [[\yii\mail\MessageInterface|message]] object. * Note that the "to" option must be set, which specifies the destination email address(es). */ public $message = []; /** * @var MailerInterface|string the mailer object or the application component ID of the mailer object. * After the EmailTarget object is created, if you want to change this property, you should only assign it * with a mailer object. */ public $mail = 'mail'; /** * @inheritdoc */ public function init() { parent::init(); if (empty($this->message['to'])) { throw new InvalidConfigException('The "to" option must be set for EmailTarget::message.'); } if (empty($this->message['subject'])) { $this->message['subject'] = Yii::t('yii', 'Application Log'); } if (is_string($this->mail)) { $this->mail = Yii::$app->getComponent($this->mail); } if (!$this->mail instanceof MailerInterface) { throw new InvalidConfigException("EmailTarget::mailer must be either a mailer object or the application component ID of a mailer object."); } } /** * Sends log messages to specified email addresses. */ public function export() { $message = $this->mail->compose(); Yii::configure($message, $this->message); $this->composeMessage($message); $this->mail->send($message); } /** * Composes the given mail message with body content. * The default implementation fills the text body of the message with the log messages. * @param \yii\mail\MessageInterface $message */ protected function composeMessage($message) { $messages = array_map([$this, 'formatMessage'], $this->messages); $body = wordwrap(implode("\n", $messages), 70); $message->setTextBody($body); } }