Для начала нам необходимо создать файл шаблон письма. Для этого создадим папку для шаблонов: /themes/themeName/views/templateMail/ и в ней файл view test.php. В файл добавим код шаблона, например:


<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>Тестовое письмо</title>
        <style type="text/css">

        /* стили для письма */

        </style>
    </head>
    <body>
    <p>Здесь все необходимые блоки и текст.</p>
    <p>Также в письмо мы можем передать переменные, например имя пользователя:</p>
    <p>Здравствуйте, <?php echo $userName; ?></p>
    <p>И еще одна переменная <b><?php echo $addVal; ?></b></p>
    </body>
</html>

Далее у нас есть два варианта отправки этого шаблона. Из контроллера или из модели.


Отправка письма из контроллера

Контроллер:

<?php

class MailTestController extends Controller {
    //...

    public function actionSendTestMail() {
        if ($this->sendTestMail()) {
            //данные отправлены
        } else {
            //ошибка при отправлении
        }
    }

    protected function sendTestMail() {
        $to= "user.email@example.com";
        $subject = "=?UTF-8?B?" . base64_encode("Тестовое письмо") . "?=";
        //используем view как тело сообщения
        $message = $this->renderPartial("//templateMail/test", 
            array(
                "userName" => "User", 
                "addVal" => "Дополнительная важная информация"), 
            true);
        $headers= "MIME-Version: 1.0\r\n";
        $headers .= "Content-type: text/html; charset=utf-8\r\n";
        $headers .= "From: robot <robot@example.com>\r\n";
        return mail($to, $subject, $message, $headers);
    }

    //...

}


Отправка письма из модели

Модель:

<?php

class TestModel extends CActiveRecord {
    
    //...
 
    public function sendTestMail() {
        $to= "user.email@example.com";
        $subject = "=?UTF-8?B?" . base64_encode("Тестовое письмо") . "?=";
        //используем view как тело сообщения
        $message = Yii::app()->controller->renderPartial("//templateMail/test", 
            array(
                "userName" => "User", 
                "addVal" => "Дополнительная важная информация"), 
            true);
        $headers= "MIME-Version: 1.0\r\n";
        $headers .= "Content-type: text/html; charset=utf-8\r\n";
        $headers .= "From: robot <robot@example.com>\r\n";
        return mail($to, $subject, $message, $headers);
    }    

    //...
}

Вызов в контроллере:

<?php

class MailTestController extends Controller {
    //...

    public function actionSendTestMail() {
        $send = TestModel->model()->sendTestMail();
        /*
        * //или вызов можно сделать так:
        * $model = new TestModel();
        *
        * //работа с моделью
        *
        * $send = $model->sendTestMail();
        */
        if ($send) {
            //данные отправлены
        } else {
            //ошибка при отправлении
        }
    }

    //...

}