Yii2 mailer

Yii2 mailer

От автора: приветствую вас, друзья. Мы продолжаем цикл статей, посвященных знакомству с фреймворком Yii2. В этой статье мы с вами познакомимся с таким вопросом, как отправка почты в Yii2. Для этого мы можем использовать специальное расширение swiftmailer, настройку которого и рассмотрим в данной статье.

Итак, для отправки почтовых сообщений с сайта Yii2 использует популярное расширение swiftmailer. Его настройка производится в файле конфигурации config/web.php, где мы можем найти дефолтную конфигурацию данного компонента:

Yii2 mailer

Как видим, в качестве компонента отправки почты – mailer – используется соответствующий класс и дополнительно используется только одна опция – useFileTransport со значением true. Данная опция позволяет тестировать отправку почты, т.е. письмо будет формироваться, но отправляться не будет, а будет сохраняться в файл.

Давайте попробуем сформировать и отправить тестовое письмо. Для этого достаточно использовать следующий базовый код:

Фреймворк YII2. Быстрая разработка с современным PHP фреймворком

Узнай тонкости современной веб-разработки с помощью фреймворка YII2

Узнать подробнее
Yii::$app->mailer->compose()
 ->setFrom('from@domain.com')
 ->setTo('to@domain.com')
 ->setSubject('Тема сообщения')
 ->setTextBody('Текст сообщения')
 ->setHtmlBody('<b>текст сообщения в формате HTML</b>')
 ->send();

Давайте поместим его в экшен главной страницы и обновим ее:

Yii2 mailer

Теперь заглянем в папку runtime/mail – именно туда и сохраняет фреймворк тестовые письма. Если такая папка появилась (изначально ее нет) и в ней есть файл с расширением .eml – значит компонент работает в тестовом режиме и можно настроить его и переходить в режим «боевой».

Yii2 mailer

Для этого нам необходимо отключить тестовый режим (‘useFileTransport’ => false) и указать настройки используемого SMTP (хост, логин, пароль, порт, протокол) в файле конфигурации:

'mailer' => [
 'class' => 'yii\swiftmailer\Mailer',
 // send all mails to a file by default. You have to set
 // 'useFileTransport' to false and configure a transport
 // for the mailer to send real emails.
 'useFileTransport' => false,
 'transport' => [
 'class' => 'Swift_SmtpTransport',
 'host' => 'smtp.ukr.net',  // e.g. smtp.mandrillapp.com or smtp.gmail.com
 'username' => 'user@ukr.net',
 'password' => 'password',
 'port' => '2525', // Port 25 is a very common port too
 'encryption' => 'ssl', // It is often used, check your provider or mail server specs
 ],
],

В примере я использовал SMTP сервиса ukr.net. Значениями username и password необходимо использовать почту и пароль от нее на данном сервисе. Также можно использовать и любой другой SMTP.

Осталось внести изменения в код отправки письма. В метод setFrom мы должны передать email, который и используется для отправки письма. Также можно передать параметр в виде массива, где ключом будет искомый email, а значением – текст, который будет подставлен в поле От. Ну и, конечно же, укажем реальный email получателя в методе setTo:

Yii::$app->mailer->compose()
 ->setFrom(['testishop2@ukr.net' => 'Письмо с сайта'])
 ->setTo('email получателя')
 ->setSubject('Тема сообщения')
 ->setTextBody('Текст сообщения')
 ->setHtmlBody('<b>текст сообщения в формате HTML</b>')
 ->send();

Попробуем обновить страницу и проверим email получателя. Если все сработало, тогда там мы увидим полученное письмо:

Yii2 mailer

Отлично, работает! А что если нам нужно отправить большое письмо? Конечно, мы можем сформировать его в методе setHtmlBody или сформировать в некоторой переменной, которую и передать параметром в setHtmlBody. Но есть куда более правильный способ. В метод compose мы можем передать параметры. Первый параметр — это вид, в котором мы и разместим необходимый HTML код письма. Вид поместим в папку mail в корне проекта. Вторым параметром мы можем передать массив переменных, которые можно использовать в искомом виде.

В качестве примера давайте сформируем простенькую табличку. Вид назовем test.php и используем в нем массив данных $names.

<table style="border: 1px solid #ddd; border-collapse: collapse; width: 100%;">
 <thead>
 <tr style="background: #f9f9f9;">
 <th style="padding: 8px; border: 1px solid #ddd;">#</th>
 <th style="padding: 8px; border: 1px solid #ddd;">Имя</th>
 </tr>
 </thead>
 <tbody>
 <?php $i = 1; foreach($names as $name): ?>
 <tr>
 <td style="padding: 8px; border: 1px solid #ddd;"><?= $i ?></td>
 <td style="padding: 8px; border: 1px solid #ddd;"><?= $name ?></td>
 </tr>
 <?php $i++; endforeach; ?>
 </tbody>
</table>

И укажем необходимые данные в методе compose, при этом методы setTextBody и setHtmlBody нам больше не нужны, поскольку текст письма будет взят из вида, поэтому удалите или закомментируйте вызов указанных методов:

$names = ['Иванов', 'Петров', 'Сидоров'];
Yii::$app->mailer->compose('test', ['names' => $names])
 ->setFrom(['testishop2@ukr.net' => 'Письмо с сайта'])
 ->setTo('email получателя')
 ->setSubject('Тема сообщения!')
 //->setTextBody('Текст сообщения')
 //->setHtmlBody('<b>текст сообщения в формате HTML</b>')
 ->send();

Попробуем обновить страницу сайта и проверим email получателя, там должно быть письмо с примерно таким содержимым:

Yii2 mailer

Все просто, не так ли? На этом сегодня все. Больше о фреймворке вы можете узнать из наших бесплатных или платных уроков. Также создание простейшего блога на Yii2 можно посмотреть в этом цикле уроков.

Фреймворк YII2. Быстрая разработка с современным PHP фреймворком

Узнай тонкости современной веб-разработки с помощью фреймворка YII2

Узнать подробнее
Самые свежие новости IT и веб-разработки на нашем Telegram-канале

Фреймворк YII2. Быстрая разработка с современным фреймворком

Узнай тонкости современной веб-разработки с помощью фреймворка YII2

Научиться

Метки:

Похожие статьи:

Комментарии Вконтакте:

Комментарии Facebook:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Я не робот.

Spam Protection by WP-SpamFree