Problem sending e-mails from queue

I’m using yii2-queue with the file driver to send batch e-mails. I’m using this class:




class SendEmailReminder extends \yii\base\BaseObject implements \yii\queue\JobInterface

{

	public $userId;


	public function execute($queue)

	{

    	$user = \app\models\User::find()

        	->select(['id', 'email', 'username'])

        	->where('id=:uid AND verified=false')

        	->params([':uid' => $this->userId])

        	->asArray()

        	->one();

    	if ($user) {

            	$body = 'test mail';

            	Yii::$app->mailer->compose()

                	->setFrom(Yii::$app->params['fromEmail'])

                	->setTo('myemail@address')

                	->setSubject('Reminder')

                	->setTextBody($body)

                	->send();

    	}

	}

}



In another controller, I have this:




public function actionRemindUsersWithNoValidatedEmail()

{

    	$users = User::find()

        	->select(['id'])

        	->where(['and', 'verified=false', '(NOW() - registered) > INTERVAL \'6 day\''])

        	->asArray()

        	->all();

    	foreach ($users as $user) {

        	Yii::$app->queue->push(new SendEmailReminder([

            	'userId' => $user['id']

        	]));

    	}

}



My web.php config:




'components' => [

..............

	'queue' => [

    	'class' => \yii\queue\file\Queue::class,

    	'path' => '@runtime/queues',

	],

	'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,

    	'transport' => [

        	'class' => 'Swift_SmtpTransport',

        	'host' => 'host',

        	'username' => 'user',

        	'password' => 'pass',

        	'port' => '587',

        	'encryption' => 'tls',

    	]

	],

]



and my console.php config:




'components' => [

	'queue' => [

    	'class' => \yii\queue\file\Queue::class,

    	'path' => '@runtime/queues',

	],

	'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,

    	'transport' => [

        	'class' => 'Swift_SmtpTransport',

        	'host' => 'host',

        	'username' => 'user',

        	'password' => 'pass',

        	'port' => '587',

        	'encryption' => 'tls',

    	]

	],

],



I call actionRemindUsersWithNoValidatedEmail and I can see @runtime/queues filling up with the queue files. If I execute ./yii queue/run, I can see that the queue is emptied (thus, processed), but unfortunately no e-mail messages get sent. What am I missing here?

Try change the smtp server and check if the problem is him

I found out about the real issue. Because in the queue execute action I used Url::to() method and since the queue run command is run in the shell, which means it is a console command, I had to add the following 3 lines in console.php:




'urlManager' => [

	class' => 'yii\web\UrlManager',

	'scriptUrl' => 'http://myurl'

]



After this change, the queue executed just fine.