【问题标题】:laravel queue not working like it did beforelaravel 队列不像以前那样工作
【发布时间】:2018-01-11 05:28:56
【问题描述】:

您好,我正在使用 mailable 并使用队列,但是当我使用 php artisan queue:listen 并发送邮件时,它并没有像预期的那样工作,我确实在 mailtrap 上收到了电子邮件,但我的控制台中没有消息.我尝试先发送邮件,然后使用我的命令,但它在没有我的命令的情况下工作。它不需要一段时间,因为它立即发送到这里是我的代码

controller.php

use Illuminate\Support\Facades\Mail;
use App\Mail\testmail;

class Controller extends Controller{
    public function email($email, Request $request){
        $emailuser = $request->input('email');
        $message = $request->input('bericht');
        mail::to($email)->queue(new testmail($emailuser, $message));
    }
}

testmail.php

<?php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;

class testmail extends Mailable
{
    use Queueable, SerializesModels;

    public $emailuser;
    public $message;
    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct($emailuser, $message)
    {
        $this->emailuser = $emailuser;
        $this->message = $message;

    }

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this->markdown('email.mail');
    }
}

mail.blade.php

@component('mail::message')
{{ $emailuser }}
{{ $message }}


Thanks,<br>
{{ config('app.name') }}
@endcomponent

有谁知道如何解决这个问题,因为我需要它来延迟我的应用程序

【问题讨论】:

    标签: laravel email laravel-5.4 laravel-blade


    【解决方案1】:

    使用作业而不是 Maillable 并在该作业中的句柄函数中写下代码以在该作业中发送电子邮件 即:

    $job = (new SendWelcomeEmail($activation->code,$user))->onQueue('default');
    

    工作文件 SendwelcomeEmail 想要如下:

    <?php
    
      namespace App\Jobs;
    
      use Illuminate\Bus\Queueable;
      use Illuminate\Queue\SerializesModels;
      use Illuminate\Queue\InteractsWithQueue;
      use Illuminate\Contracts\Queue\ShouldQueue;
      use Illuminate\Foundation\Bus\Dispatchable;
      use App\Jobs\Job;
      use Mail;
    
    
    class SendWelcomeEmail extends Job implements ShouldQueue
    {
      use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
    
    /**
     * Create a new job instance.
     *
     * @return void
     */
    protected $activation_code;
    protected $user;
    public function __construct($activation_code,$user)
    {
    
        $this->activation_code=$activation_code;
        $this->user=$user;
    
    }
    
    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        try{
        $user=$this->user;
        Mail::send('emails.user.register', ['activation_code' => $this->activation_code,'user'=>$this->user], function ($m) use ($user) {
                        $m->to($user->email,$user->first_name." ".$user->last_name)
                            ->subject(trans('emails.USER_REGISTER_SUBJECT',['project'=>trans('project.project_name')]));
                    });
            \Log::useDailyFiles(storage_path().'/logs/user-registration/success/'.date('Y-m-d').'.log');
            \Log::info('Welcome Email Send to-:'.$user->email);
        }catch(Exception $ex){
            \Log::useDailyFiles(storage_path().'/logs/user-registration/error/'.date('Y-m-d').'.log');
            \Log::error($ex->getMessage());
            \Log::error("Line Number->".$ex->getLine());
        }
    }
    }
    

    【讨论】:

    • 这不是在回答 OP 的问题,而是闻起来像解决方法,没有打扰真正的罪魁祸首。
    • 这不是一个工作环境,它是 Jobs 的实现,这样调试和跟踪非常容易,因为从 laravel 5.2 开始,你不能直接使用 Maill::queue() 没有可邮寄的班级或工作
    猜你喜欢
    • 1970-01-01
    • 2012-05-12
    • 1970-01-01
    • 1970-01-01
    • 2020-02-02
    • 1970-01-01
    • 1970-01-01
    • 2017-10-20
    • 2018-06-20
    相关资源
    最近更新 更多