ksv's avatar
Level 1

Problem with mail queue in Lumen

Trying to send mail in queue.

$mailer = app('mailer');
$mailer->setQueue(app('queue'))->to($user)->send(new UserRegistered($user));    

and UserRegistered::build is

return $this->subject('registered')
    ->view('emails.user.registered')
    ->with([
        'user' => $this->user
    ]);

Job is sucessfully added to jobs table (using queue with database driver). But mail is not sending. In lumen.log i see following message

[2017-01-31 10:02:10] lumen.ERROR: Illuminate\Contracts\Container\BindingResolutionException: Target [Illuminate\Contracts\Mail\Mailer] is not instantiable.
.........

How to solve this?

0 likes
3 replies
ksv's avatar
ksv
OP
Best Answer
Level 1

Solved by creating job for sending mail.

class SendUserRegisteredMail extends Job
{
    ...
    public function handle()
    {
        app('mailer')->to($this->user)->send(new UserRegistered($this->user));
    }
}

class UserObserver
{
    public function created(User $user)
    {
        app('queue')->push(new SendUserRegisteredMail($user));
    }
}
AugustoSL's avatar

Hello @ksv, I am using Lumen 5.3 and when sent a queued email from my controller class gives me no exception and the queued email is stored in jobs table, but the email was not sent (the resource gives me a success response). I have not got any errors in Lumen logs.

Here's the code in my controller class:

public function signup(Request $request) {

...

Queue::push((new SendUserRegisterMail($user))->onQueue('emails'));

        return response()->json([
                'message' => "The user was succefully created, please check your email {$email} to active your new account."
        ], Response::HTTP_CREATED);
}

Here's the code in my Jobs class:

    public function handle()
    {
        Mail::to($this->user->user_mail)->send(new Register($this->user));
    }

Here's the code in my Mailable class:


    public function build()
    {       
        return $this->from('[email protected]')
                    ->view('mails.register');
    }

I enabled facades in app to use Mail and Queue classes and I created the migrations for jobs and failed_jobs entities and lastly, I set QUEUE_DRIVER equal to database in ENV configuration file.

Maybe I miss some configuration?, I would really appreciate some tips,

Thanks in advanced.

Please or to participate in this conversation.