Задать вопрос

Как заставить работать swiftmailer из консольного контроллера в Yii2?

На портале создаются заявки. При создании заявки it-админам производится рассылка писем на почту. Сначала был вариант, когда прямо в action-е при создании заявки выполнялась функция рассылки:

Yii::$app->mailer->compose('newtaskcreated', [   //шаблон письма
            'model' => $this
        ])  ->setTo($mass_email)                // массив адресов
            ->setSubject("Портал Yii2 - Новая заявка, №".$this->id)
            ->send();


В таком варианте функция работает долго, за каждый новый почтовый адрес прибавляется примерно 1 секунда выполнения рассылки. Для 3 адресов - 3 секунды задержки создания новой заявки. Встала необходимость убрать рассылку писем в фон. Хотел вызывать функцию рассылки AJAX-ом, но этот вариант не подошел, т.к. существуют заявки, которые создаются сервером.

С командной шиной не разобрался, и было решено сделать рассылку cron-ом. При создании заявки она добавляется в очередь на рассылку, крон каждые 10 минут просматривает очередь и делает рассылку. Так вот в консольном контроллере эта же функция рассылки из web-приложения не работает! Выдает ошибку:

Exception 'Swift_TransportException' with message 'Expected response code 220 but got code "", with message ""'

in /var/www/it2/basic_yii/vendor/swiftmailer/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php:419


То есть для web-приложения работает, а в консоли нет. Куда копать?

Настройки в файле web (приложение basic):

'mailer' => [
            'class' => 'yii\swiftmailer\Mailer',
            'useFileTransport' => false,
            'viewPath' => '@app/mail',
            'htmlLayout' => 'layouts/html',
            'messageConfig' => [
                'charset' => 'UTF-8',
                'from' => ['XXXXXX@yandex.ru' => 'XXXXXX'],
            ],
            // данные для YANDEX sftp
            'transport' => [
                'class' => 'Swift_SmtpTransport',
                'host' => 'smtp.yandex.ru',
                'username' => 'XXXXXX@yandex.ru',
                'password' => 'XXXXXX',
                'port' => '465',
                'encryption' => 'ssl',
            ],
        ],
  • Вопрос задан
  • 1099 просмотров
Подписаться 2 Простой Комментировать
Решения вопроса 1
qonand
@qonand
Software Engineer
скорее всего у Вас в конфигурации консольного приложения (в файле config/console.php) не определен или не правильно настроен компонент mailer
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
berezuev
@berezuev
#define TRUE FALSE
Если сервер крутится на nginx, то можно и из браузера быстро отправлять
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы