Подключаем SwiftMailer к Yii
Рубрика: Мелкие заметки на тему Yii
18 Окт. 2009
Разговор сегодня пойдет про SwiftMailer. Это удобный инструмент для отправки почты из php скрипта. Вы сможете:
- очень легко и просто прикреплять вложения к письму
- посылать сообщения используя SMTP, sendmail, postfix. Поддерживается шифрование паролей
- встроенная защита от иньекций в заголовках и тексте письма
вы больше некогда не вспомните про то, что такое функция mail() в php...
---Сам SwiftMailer может быть установлен в виде пакета на сервер или просто закачен в виде набора php классов. Для простой установки на хост, советовал бы на досуге почитать инструкцию. Список плюсов который я привел - естественно не полный, для более детального изучения инструмента - посмотрите их сайт [англ.]
Говорить мы будем про подключение данного инструмента к Yii.
- Первым делом скачайте SwiftMailer 4.1
- Создайте каталог protected/vendor/swift
- Достаньте с архива папку lib, и перенесите её содержимое в protected/vendor/swift
Если бы мы не использовали Yii, то четвертым пунктом был бы запуск следующего кода для проверки:
function sendHtmlMail($from, $to, $subject, $body, $attachments = array()) {
require_once 'lib/swift_required.php';
$message = Swift_Message::newInstance()
->setSubject($subject)
->setFrom($from)
->setTo($to)
->setBody($body, 'text/html');
$transport = Swift_SmtpTransport::newInstance('host', 25)
->setUsername('username')
->setPassword('password');
$mailer = Swift_Mailer::newInstance($transport);
return $mailer->send($message);
}
var_dump(sendHtmlMail("fromMailAddress", "toMailAddress", "subject", "body"));
Для работы с Yii, нам достаточно изменить строчку:
require_once 'lib/swift_required.php';
на:
spl_autoload_unregister(array('YiiBase','autoload'));
Yii::import('application.vendor.swift.swift_required', true);
spl_autoload_register(array('YiiBase','autoload'));
На этом в принципе теоретическая часть заканчивается. Посмотрите код который я привел выше — и попробуйте на нем составить свои примеры.
- Идейный вдохновитель этого материала Marko Bischof и его статья «Mail versenden mit Swift_Mailer und Yii» [нем.]
Если хотите опубликовать этот материал у себя - пожалуйста, разместите ссылку на страницу откуда вы его взяли.
- Заказали мне в общем сделать на сайте элемент, который информировал бы о кол-ве людей на сайте. Некий счетчик живого онлайна. ... "Хитрый счетчик "онлайна на сайте""
- На самом деле Yii является отличным инструментом для создания приложения на PHP. Первое с чем сталкивается разработчик на Yii ... "Kohana хелперы в Yii"
- Сегодня разговор снова пойдет про деревья :) Наткнулась мне заметка «Display an AJAX tree from your DB using CtreeView» которую ... "Открытие узлов дерева через AJAX"

[guest] Гость
Было сказано: Вторник, 21 Декабрь 2010
А куда вставлять в коде Yii эту функцию sendHtmlMail? В каждый контроллер?

[guest] zolter
Было сказано: Вторник, 21 Декабрь 2010
Есть несколько вариантов:
1. сделать как компонент
2. контроллеры наследовать от какого то своего ABS, который сам уже будет наследоваться от ABS. И вот в этом главном контроллере и пихайте эту функцию

[guest] Гость
Было сказано: Четверг, 23 Декабрь 2010
в стандартном yii блоге(там где обратная связь) засунул функцию в
SiteController, в actionContact, который срабатывает после клика по сабмиту в форме обратной связи.
$from = $_POST['ContactForm']['email'];
$to = "****@gmail.com";
$subject = $_POST['ContactForm']['subject'];
$body = $_POST['ContactForm']['body'];
$attachments = array();
$this->sendHtmlMail($from, $to, $subject, $body, $attachments = array());
ниже в SiteController добавил
function sendHtmlMail($from, $to, $subject, $body, $attachments = array()) {
//die('sss');
spl_autoload_unregister(array('YiiBase','autoload'));
Yii::import('application.vendor.swift.swift_required', true);
spl_autoload_register(array('YiiBase','autoload'));
$message = Swift_Message::newInstance()
->setSubject($subject)
->setFrom($from)
->setTo($to)
->setBody($body, 'text/html');
$transport = Swift_SmtpTransport::newInstance('host', 25)
->setUsername('username')
->setPassword('password');
$mailer = Swift_Mailer::newInstance($transport);
return $mailer->send($message);
}Fatal error: Class 'CException' not found in C:\vhosts\mb\html\framework\YiiBase.php on line 310
не понимаю что такое...

[guest] sape
Было сказано: Среда, 31 Август 2011
Парень, что то мне подсказывает, что ты не содержимое папки, а папку перенес )))

[guest] sape
Было сказано: Среда, 31 Август 2011
хотя если перенести папку, то ерроры + скрипт интересуетсо папкой lib
А если скопировать целиком папку lib и подключить так
Yii::import('application.extensions.swift.lib.swift_required', true);например, то все замечательно работает


