Отправка почты mailer

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
riaron
Сообщения: 97
Зарегистрирован: 2018.12.04, 14:12

Отправка почты mailer

Сообщение riaron »

Прочитал документацию ничего конкретного, Яндекс тоже не помог,

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

<?php

Yii::$app->mailer->compose()
    ->setFrom('riaronff@mgail.com')
    ->setTo('riaronff@gmail.com')
    ->setSubject('Novost')
    ->setTextBody('Текст сообщения')
    ->setHtmlBody('<b>текст сообщения в формате HTML</b>')
    ->send();
  return Yii::$app->getResponse()->redirect(array('/user/site'));
Вот файл web.php

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

'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,
        ],
Вот файл console.php

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

'mailer' => [
        'class' => 'yii\swiftmailer\Mailer',
        'useFileTransport' => false,
        'viewPath' => '@app/mail',
        'messageConfig' => [
            'charset' => 'UTF-8',
            'from' => ['riaronff@gmail.com' => 'admin'],
        ],
        'transport' => [
            'class' => 'Swift_SmtpTransport',
            'host' => 'smtp.gmail.com',
            'username' => 'riaronff@gmail.com',
            'password' =>'4444444',
            'port' => '587',
            'encryption' => 'tls',
        ],
unknownby
Сообщения: 749
Зарегистрирован: 2019.11.05, 16:34
Контактная информация:

Re: Отправка почты mailer

Сообщение unknownby »

Отправка почты через консоль у вас?
Попробуйте прописать все настройки в web
riaron
Сообщения: 97
Зарегистрирован: 2018.12.04, 14:12

Re: Отправка почты mailer

Сообщение riaron »

Не помогло. Ещё была ошибка в написании почты тоже исправил
unknownby
Сообщения: 749
Зарегистрирован: 2019.11.05, 16:34
Контактная информация:

Re: Отправка почты mailer

Сообщение unknownby »

riaron писал(а): 2020.02.18, 11:36 Не помогло. Ещё была ошибка в написании почты тоже исправил
В моем случае вот так настроено и работает отправка почты. Ошибки пишет хоть какие-нибудь? А то так гадать можно долго.
Файл web, в консоли ничего нет.

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

'mailer'  => [
            'class'  => 'yii\swiftmailer\Mailer',
            'useFileTransport' => false,
            'transport' => [
                'class' => 'Swift_SmtpTransport',
                'host'  => 'mail.mysite.by',
                'username' => 'support@mysite.by',
                'password' => '*********',
                'port' => '587',
                'encryption' => 'tls',
            ],
        ],
riaron
Сообщения: 97
Зарегистрирован: 2018.12.04, 14:12

Re: Отправка почты mailer

Сообщение riaron »

Ошибок не выдает. Сделал как у вас, все равно не работает
riaron
Сообщения: 97
Зарегистрирован: 2018.12.04, 14:12

Re: Отправка почты mailer

Сообщение riaron »

вроде сделал все правильно но ничего не работает
Последний раз редактировалось riaron 2020.03.04, 15:11, всего редактировалось 2 раза.
riaron
Сообщения: 97
Зарегистрирован: 2018.12.04, 14:12

Re: Отправка почты mailer

Сообщение riaron »

Почта отправляется из views atddd
unknownby
Сообщения: 749
Зарегистрирован: 2019.11.05, 16:34
Контактная информация:

Re: Отправка почты mailer

Сообщение unknownby »

riaron писал(а): 2020.03.03, 21:09 Почта отправляется из views atddd
Доступы убери из публичного сообщения. Надо было в личку написать, на крайний случай.
Поменяй в конфиге на такое.

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

'port' => '587',
'encryption' => 'tls',
Может не работать не потому, что не правильно настроена отправка. Как вариант сохранение не прошло либо еще какой косяк.
Почему почта отправляется через представление? Что насчет MVC?
Представление для отображения информации. Отправка почты должна быть через модель.
Логика:
На представлении есть кнопка (action). Мы нажимаем на неё, дальше наш контроллер выполняет action, в котором сказано "Вот такая модель NewModel и из неё нужно выполнить метод sendMail". Модель выполняет действия и возвращает результат, например, true|false чтобы понимать прошла отправка успешно или нет. При true выводить дополнительно в представление сообщение об успешной отправке письма.
В контроллере

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

$model = new NewModel;

if($model->sendMail()){
//flash сообщение
}

return $this->render('your_view_file');
В модели NewModel

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

public function sendMail(){
//тут магия отправки
}
Все манипуляции с моделями хорошо бы делать в модели (в твоем случае в Onjob). Только не понятно какая модель Onjob у тебя используется. Какой-то конкретной не увидел. Для создания НОВОЙ записи можно так сделать.

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

$orders=Orders::findOne($id);
$onjob= new Onjob;
$onjob->name 		= $orders->name;
$onjob->problem 	= $orders->problem;
$onjob->phone 		= $orders->phone;
$onjob->date 		= $orders->date;
$onjob->text 		= $orders->text;
$onjob->date1 		= date('G:i:s Y:m:d');
$onjob->save(false);
Все что ты сделал вот тут

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

$request=Yii::$app->request;
global $user; //не увидел использование
$id=$request->get('id'); //думаю и тут можно сделать что-то, просто не вижу всей картины в целом
$date=date('G:i:s Y:m:d'); //используется 1 раз, а значит можно перенести в нужное место, чтоб не плодить строки кода (смотри вверху)
$orders=Orders::find()->where(['id'=>$id])->one(); //это можно сократить (вверху) при условии, что id это первичный ключ
P.S.
Переноси логику в разные места, чтобы можно было отследить где и что не работает. Перенос логики в разные места, а именно распределение её туда, где она должна быть поможет тебе в расширяемости кода и использовании его в других местах.
Например, отправка почты. Сделал в отдельной модели отправку и передаешь в неё нужные параметры. Можно использовать хоть в 10ти местах без дублирования кода отправки, только передаешь нужные параметры. ;)
riaron
Сообщения: 97
Зарегистрирован: 2018.12.04, 14:12

Re: Отправка почты mailer

Сообщение riaron »

Создал модель Sender.php

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

namespace app\models;
use app\models\Yii;
use yii\base\Model;
class Sender extends Model
{
	public function sendMail($mail){
		Yii::$app->mailer->compose()
    ->setFrom('riaron86@mail.ru')
    ->setTo($mail)
    ->setSubject('Novost')
    ->send();
	}
}
Создал представление sender

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

echo $a;
Контроллер

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

public function actionSender(){
	$snd=new Sender;
if($snd->sendMail('riaronff@gmail.com')){
	$a='ok';
}else{
	$a='bad';
}



 return $this->render('sender',['a'=>$a]);
}
выводит ошибку
yii\base\ErrorException
riaron
Сообщения: 97
Зарегистрирован: 2018.12.04, 14:12

Re: Отправка почты mailer

Сообщение riaron »

админ уберите пароль с моего поста
кому нужен пароль пишите
unknownby
Сообщения: 749
Зарегистрирован: 2019.11.05, 16:34
Контактная информация:

Re: Отправка почты mailer

Сообщение unknownby »

riaron писал(а): 2020.03.04, 14:02 админ уберите пароль с моего поста
кому нужен пароль пишите
Пролистай вверх и там должно быть редактирование записи.
unknownby
Сообщения: 749
Зарегистрирован: 2019.11.05, 16:34
Контактная информация:

Re: Отправка почты mailer

Сообщение unknownby »

riaron писал(а): 2020.03.04, 14:01 Создал модель Sender.php

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

namespace app\models;
use app\models\Yii;
use yii\base\Model;
class Sender extends Model
{
	public function sendMail($mail){
		Yii::$app->mailer->compose()
    ->setFrom('riaron86@mail.ru')
    ->setTo($mail)
    ->setSubject('Novost')
    ->send();
	}
}
P.S.
Зачем расширять класс Sender? И что за мифическая модель Yii? Для чего ты передаешь жостка переменные внутри Sender?
В принципе должна выйти такая модель у тебя

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

namespace app\models;

use Yii;

class Sender
{
	public $from;
	public $to;
	public $subject;

	public function __construct()
	{
		$this->from = 'riaron86@mail.ru';
	}
    
	public function sendMail(){
		Yii::$app->mailer->compose()
			->setFrom($this->from)
			->setTo($this->to)
			->setSubject($this->subject)
			->send();
	}
}
В контроллере сделай вот как

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

public function actionSender(){
	$snd=new Sender;
	$snd->to('riaronff@gmail.com');
	$snd->subject('Novost');
	$snd->sendMail();

 return $this->render('sender');
}
Так должно сработать, если отправка почты работает корректно.
riaron
Сообщения: 97
Зарегистрирован: 2018.12.04, 14:12

Re: Отправка почты mailer

Сообщение riaron »

Спасибо, заработало
Ответить