На портале создаются заявки. При создании заявки 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',
],
],