Отправка email уведомлений в Yii2

Добрый день многоуважаемое сообщество!

Сегодня я хотел бы рассказать о новом расширении для отправки различных email уведомлений в yii2. Это простая обертка над PHPmailer. Суть её заключается в работе с двумя объектами — Postman (почтальон) и Letter (письмо).

Установка

Для установки расширения есть два пути:

Github
Все тривиально просто:
git clone https://github.com/rmrevin/yii2-postman.git
Но в этом случае Вам потребуется установить PHPmailer самостоятельно.

Composer
С композером все не менее прозаично, достаточно в зависимости добавить строку:
"rmrevin/yii2-postman": "dev-master"
PHPmailer, в данном случае, подтянется сам, благодаря волшебству composer'a.

Настройка

Конфигурируется Postman не менее легко, как и устанавливается. В protected/config/main.php необходимо добавить новый компонент, с одноименным названием postman:
<?
return array(
    // ...
    'components' => array(
        // ...
        'postman' => array(
            'class' => 'yii\postman\Postman',
            'driver' => 'smtp',
            'table' => 'tbl_letters',
            'default_from' => array('track@rmrevin.ru', 'Mailer'),
            'view_path' => '/email',
            'smtp_config' => array(
                'host' => 'smtp.yandex.ru',
                'port' => 25,
                'auth' => true,
                'user' => 'track@rmrevin.ru',
                'password' => 'uA8qbaMDzFjDzu6gcn3p',
                'secure' => false,
                'debug' => false,
            )
        ),
    ),
    // ...
);
Пройдемся по параметрам:
  • driver — драйвер, используемый для отправки почты.
  • table — название таблицы в базе данных, куда будут сохраняться письма.
  • default_from — дефолтное значение для поля «от кого». В качестве аргумента принимает массив, нулевым элементом которого является email адрес (обязателен), а первым — имя (не обязателен). Тут стоит отметить, что любой email адрес в этом модуле задается именно таким образом.
  • view_path — папка в директории views, в которой находятся шаблоны писем.
  • smtp_config — настройки для подключения к smtp серверу. Задается в виде массива, все элементы которого должны быть для Вас очевидны.

Использование

К сожалению, или к счастью, программы, написанные мной, отличаются своей возможностью работать, используя разные сценарии. Так и здесь не обошлось без эзотерики. Для создания письма достаточно создать экземпляр класса Letter. Есть два вида реализации этого класса:
  • RawLetter — письмо создается из простой строковой переменной.
  • ViewLetter — письмо создается из view файла.

RawLetter
Создание объекта письма:
<?
$Letter = new RawLetter($subject, $body, $alt_body=null);
Параметры:
  • subject — заголовок письма
  • body — тело сообщения
  • alt_body — альтернативное тело сообещния

ViewLetter
Создание объекта:
<?
$Letter = new ViewLetter($subject, $view, $params=array());
Параметры:
  • subject — заголовок письма.
  • view — название view файла. Файл определяется по следующему алгоритму:
    Yii::$app->getViewPath() . $this->_postman->view_path . '/' . $view . ($is_html ? 'html' : 'raw') . '.php'

    Например, если $view = 'test-message', а $is_html = true, то файл view будет /protected/views/email/test-message.html.php;
    если $view = 'singin/user', а $is_html = false, то файл view будет /protected/views/email/singin/user.raw.php.
  • params — массив параметров, передаваемых во view файл.

Общий функционал для RawLetter и ViewLetter
Добавление адресатов:
<?
// можно добавлять по одному
$Letter->add_address(array('user@somehost.com', 'User name'));
$Letter->add_cc_address(array('user@somehost.com', 'User name'));
$Letter->add_bcc_address(array('user@somehost.com', 'User name'));
$Letter->add_reply_to(array('user@somehost.com', 'User name'));

// можно добавлять сразу пачки
$Letter->add_address_list(
    // обычные получатели
    array(
        array('user@somehost.com', 'User name'),
        array('user2@somehost.com', 'User name')
    ),
    // получатели в копии
    array(
        array('cc@somehost.com', 'User name')
    ),
    // получатели в скрытой копии
    array(
        array('bcc@somehost.com', 'User name')
    ),
    // ответное письмо будет написано этим адресатам
    array(
        array('reply@somehost.com', 'User name')
    )
);

Добавление приложения к письму:
<?
$Letter->add_attachment('/path/to/file.tar.gz');

И, наконец, отправка письма:
<?
if(!$Letter->send()){
    echo $Letter->get_last_error();
}

Заключение

Надеюсь Вы найдете для себя полезным это расширение. Приятного кодинга!

10 комментариев

avatar
Однозначно в мемориз.
Yii2 уже стабилен?
avatar
Нет ещё. Апи довольно быстро видоизменяется.
avatar
Проще на симфони 2 пересесть, чем дождаться стабильной yii2
avatar
Руки чешутся.
avatar
щас заценим
avatar
Отлично получилось
avatar
почтальон и письма )))
avatar
Хотел сначала сделать такую фишку: объекту почтальону передается несколько объектов писем, и далее почтальон уже их рассылает адресатам. Но в процессе тестирования, выявилось, что такая схема лучше работает.
avatar
Composer тут отлично вписался
avatar
Действительно, композер отличное решение.

rmrevin, напиши обзор, как запустить приложение на yii2 из композера.

Оставить комментарий