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

Сегодня я хотел бы рассказать о новом расширении для отправки различных email уведомлений в yii2. Это простая обертка над PHPmailer. Суть её заключается в работе с двумя объектами — Postman (почтальон) и Letter (письмо).
Установка
Для установки расширения есть два пути:- склонировать из репозитория на github;
- установить через менеджер пакетов composer (расширение доступно в виде пакета).
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 комментариев
Yii2 уже стабилен?
rmrevin, напиши обзор, как запустить приложение на yii2 из композера.