Расширение mail (SwiftMailer wrapper)

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Аватара пользователя
greatdane
Сообщения: 408
Зарегистрирован: 2010.10.20, 14:05
Откуда: Электросталь
Контактная информация:

Расширение mail (SwiftMailer wrapper)

Сообщение greatdane »

Пожалуйста, разжуйте кто-нибудь - как использовать это расширение? Я попробовала как приведено в примере на странице расширения:

Код: Выделить всё

$message = new YiiMailMessage;
$message->view = 'registrationFollowup';
 
//userModel is passed to the view
$message->setBody(array('userModel'=>$userModel), 'text/html');
 
 
$message->addTo($userModel->email);
$message->from = Yii::app()->params['adminEmail'];
Yii::app()->mail->send($message); 
Получила ошибку 500: Error 500
Property "CWebApplication.mail" is not defined.

Я так понимаю - надо еще что-то в конфиге указывать? Что и как?
И еще - вот эта userModel в примере - это что? Обычная модель? Можно взять CActiveRecord, к примеру?
А кодировку куда прописывать?
И как всегда у меня фикс на путях... вот это в примере: $message->view = 'registrationFollowup'; - где эта вьюшка должна лежать?
Аватара пользователя
mihan007
Сообщения: 31
Зарегистрирован: 2011.01.28, 11:05
Откуда: Санкт-Петербург
Контактная информация:

Re: Расширение mail (SwiftMailer wrapper)

Сообщение mihan007 »

юзал несколько другое расширение-обёртку над SwiftMailer. Там в примере всё подробно расписано(http://www.yiiframework.com/extension/swiftmailer). В вашем расширении ситуация скорее всего аналогичная.

ps Глянул код компонента, указанного вами. Там в шапке класса YiiMail.php подробно расписано как его подключать и использовать, а именно
1. настраиваем конфиг приложения

Код: Выделить всё

return array(
     ...
     'import' => array(
         ...
         'ext.mail.YiiMailMessage',
     ),
     'components' => array(
         'mail' => array(
             'class' => 'ext.yii-mail.YiiMail',
             'transportType' => 'php',
             'viewPath' => 'application.views.mail',
             'logging' => true,
             'dryRun' => false
         ),
         ...
     )
);
 
2. юзаем в любом экшене:

Код: Выделить всё

$message = new YiiMailMessage;
$message->setBody('Message content here with HTML', 'text/html');
$message->subject = 'My Subject';
$message->addTo('johnDoe@domain.com');
$message->from = Yii::app()->params['adminEmail'];
Yii::app()->mail->send($message);
 
3. Кодировка, согласно определению функции setBody, это 3-й параметр вызова функции (по умолчанию в четвёртой версии SwiftMailer это utf-8 -- http://swiftmailer.lighthouseapp.com/pr ... ding-issue)

Код: Выделить всё

public function setBody($body = '', $contentType = null, $charset = null)
 
4. Вьюшки в указанном вами примере лежат в папке, указанной в конфиге, а именно 'viewPath' => 'application.views.mail'. Работа с ними аналогична работе с другими вьюшками и, как вы верно отметили,
userModel в примере - это что? Обычная модель? Можно взять CActiveRecord...
с уважением,
Куклин Михаил

контакты: +79313601666 | mihan007@ya.ru | https://paradox777.ru
Аватара пользователя
greatdane
Сообщения: 408
Зарегистрирован: 2010.10.20, 14:05
Откуда: Электросталь
Контактная информация:

Re: Расширение mail (SwiftMailer wrapper)

Сообщение greatdane »

Снова решила попробовать поковырять эту штуку...

В конфиге:

Код: Выделить всё

'mail' => array(
             'class' => 'application.extensions.yii-mail.YiiMail',
             'transportType' => 'php',
             'viewPath' => 'application.views.mail',
             'logging' => true,
             'dryRun' => false
         ),
 
В модели:

Код: Выделить всё

protected function beforeSave()
    {
        if($this->isNewRecord) {
                $message = new YiiMailMessage;
                $message->view = 'newuser';
                $message->setSubject('Ваша регистрационная запись');
                //userModel is passed to the view
                $message->setBody(array('model'=>$this), 'text/html', 'utf-8');
                $message->addTo($this->email);
                $message->from = Yii::app()->params['adminEmail'];
                Yii::app()->mail->send($message);
                // тут еще действия
        }
        if($this->hasEventHandler('onBeforeSave'))
        {
                $event=new CModelEvent($this);
                $this->onBeforeSave($event);
                return $event->isValid;
        }
        else
                return true;
    } 
Никакая ошибка не выдается. Никакое письмо не отправляется... в логах почты — пусто. В application.log — никаких ошибок. В чем может быть дело?
Аватара пользователя
coder
Сообщения: 139
Зарегистрирован: 2010.04.09, 23:42
Откуда: Москва

Re: Расширение mail (SwiftMailer wrapper)

Сообщение coder »

Если ещё актуально, глянь файл \yii-mail\vendors\swiftMailer\preferences.php. У меня там is_writable(sys_get_temp_dir()) выдавало ошибку open_basedir restriction in effect. Вписал другую папку, заработало.
Аватара пользователя
greatdane
Сообщения: 408
Зарегистрирован: 2010.10.20, 14:05
Откуда: Электросталь
Контактная информация:

Re: Расширение mail (SwiftMailer wrapper)

Сообщение greatdane »

Спасибо, может на будущее пригодится... Но я не справилась :-) Плюнула и заюзала вот это — попроще и попонятнее.
Аватара пользователя
BuCeFaL
Сообщения: 447
Зарегистрирован: 2010.03.17, 21:22
Откуда: Kiev
Контактная информация:

Re: Расширение mail (SwiftMailer wrapper)

Сообщение BuCeFaL »

coder писал(а):Если ещё актуально, глянь файл \yii-mail\vendors\swiftMailer\preferences.php. У меня там is_writable(sys_get_temp_dir()) выдавало ошибку open_basedir restriction in effect. Вписал другую папку, заработало.
Чисто случайно не red hat? (Fedora, CentOs)
Похоже на SELinux, нужно контексты сменить на директорию.

UPD:
Хотя.. бекслеши намекают..
Аватара пользователя
coder
Сообщения: 139
Зарегистрирован: 2010.04.09, 23:42
Откуда: Москва

Re: Расширение mail (SwiftMailer wrapper)

Сообщение coder »

Ошибка выскакивала на Debian. Путь копировал локально под windows, отсюда и слеши :)

Да, я так и сделал, просто заменил код определения временной папки на:

Код: Выделить всё

Swift_Preferences::getInstance()
    -> setTempDir(Yii::getPathOfAlias('webroot') . '/tmp')
    -> setCacheType('disk');
 
С этой папкой естественно проблем нет и расширение работает корректно.
rafail.mamedov
Сообщения: 2
Зарегистрирован: 2012.02.29, 20:53

Re: Расширение mail (SwiftMailer wrapper)

Сообщение rafail.mamedov »

Здравствуйте, модуль встал почти успешно, но русские символы в письме трансформируются в кракозябру. Не подскажите в чем может быть дело?
'import' => array
(
...
'application.extensions.swiftMailer.YiiMailMessage',
)
'mail' => array(
'class' => 'application.extensions.swiftMailer.YiiMail',
'transportType' => 'php',
'viewPath' => 'application.views.swiftMailer',
'logging' => true,
'dryRun' => false

$message = new YiiMailMessage;
$message->view = 'registrationFollowup';

//userModel is passed to the view
$message->setBody(array('userModel' => $userModel), 'text/html');


$message->addTo('externus@mail.ru');
$message->from = Yii::app()->params['adminEmail'];
Yii::app()->mail->send($message);
Аватара пользователя
andy_s
Сообщения: 127
Зарегистрирован: 2012.01.22, 13:15

Re: Расширение mail (SwiftMailer wrapper)

Сообщение andy_s »

registrationFollowup в utf-8?
rafail.mamedov
Сообщения: 2
Зарегистрирован: 2012.02.29, 20:53

Re: Расширение mail (SwiftMailer wrapper)

Сообщение rafail.mamedov »

Да, конечно
Аватара пользователя
Hyperc0der
Сообщения: 7
Зарегистрирован: 2012.08.13, 17:31
Откуда: Königsberg

Re: Расширение mail (SwiftMailer wrapper)

Сообщение Hyperc0der »

Добрый день, прочел всю документацию по расширению, не нашел как правильно задать настройки почтового сервера «на лету».

Есть стандартный конфиг:

Код: Выделить всё

 'mail' => array(
            'class' => 'ext.yii-mail.YiiMail',
            'transportType' => 'smtp',
            'transportOptions' => array(
                'host' => 'smtp.host.com',
                'username' => '***',
                'password' => '***',
                'port' => 25,
            ),


        ),
Все хорошо, но нужно отправлять также и с других ящиков.
Напрямую обратиться к св-ву transportOptions не получается.

Есть ли какие-нибудь идеи на этот счет?
Random dev.
Аватара пользователя
mihan007
Сообщения: 31
Зарегистрирован: 2011.01.28, 11:05
Откуда: Санкт-Петербург
Контактная информация:

Re: Расширение mail (SwiftMailer wrapper)

Сообщение mihan007 »

Первое, что приходит на ум - создавать компонент на лету и использовать его:
http://www.yiiframework.com/doc/api/1.1 ... ent-detail

Общие конфиги можно вынести в конфиг приложения, перед создание компонента мёрджить их с теми, что будут изменяться.
Если нужен пример - пишите.
с уважением,
Куклин Михаил

контакты: +79313601666 | mihan007@ya.ru | https://paradox777.ru
Sasha_ch
Сообщения: 80
Зарегистрирован: 2011.04.10, 15:59
Контактная информация:

Re: Расширение mail (SwiftMailer wrapper)

Сообщение Sasha_ch »

пример как указать SSL,порт 465, лог/пароль в случае отправки через SMTP Yandex (или gmail Google думаю аналогично)
(для обертки http://www.yiiframework.com/extension/swiftmailer)

Код: Выделить всё

// New transport
$Transport = $SM->smtpTransport('ssl://smtp.yandex.ru', '465')
    ->setUsername('nick@domain.ru')
    ->setPassword('passwordhere'); 
...в документации не указано, думаю актуально.
...хотя актуально Yii2 )
CPU comparison platform: CPU Boss Multi language, Yii2 powered.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Расширение mail (SwiftMailer wrapper)

Сообщение zelenin »

Sasha_ch писал(а):пример как указать SSL,порт 465, лог/пароль в случае отправки через SMTP Yandex (или gmail Google думаю аналогично)
(для обертки http://www.yiiframework.com/extension/swiftmailer)

Код: Выделить всё

// New transport
$Transport = $SM->smtpTransport('ssl://smtp.yandex.ru', '465')
    ->setUsername('nick@domain.ru')
    ->setPassword('passwordhere');
...в документации не указано, думаю актуально.
...хотя актуально Yii2 )
чувак, все из этой темы уже умерли несколько лет назад.
Sasha_ch
Сообщения: 80
Зарегистрирован: 2011.04.10, 15:59
Контактная информация:

Re: Расширение mail (SwiftMailer wrapper)

Сообщение Sasha_ch »

это да... согласен и извиняюсь перед всеми кого мои сообщения отвлекли :oops: :)
просто вот прямо сейчас на одном из проектиков стоит еще yii1 и возникла задача слать через swiftmailer а не через PHP mail()

...самому неудобно что "освежил" эту тему)
CPU comparison platform: CPU Boss Multi language, Yii2 powered.
Ответить