Home > PHP Framework > Laravel > Laravel Queue Sending Mail

Laravel Queue Sending Mail

藏色散人
Release: 2019-10-21 13:36:08
forward
2892 people have browsed it

Batch processing task scenarios are often used in our development, such as mass email, message notification, SMS, flash sales, etc. We need to put this time-consuming operation in the queue for processing, thereby greatly shortening the Web request and response time.

The following explains the use of queues in Laravel

Configuration file config/queue.php

<?php
return [
    &#39;default&#39; => env(&#39;QUEUE_DRIVER&#39;, &#39;sync&#39;),
    &#39;connections&#39; => [
        &#39;sync&#39; => [
            &#39;driver&#39; => &#39;sync&#39;,
        ],
        &#39;database&#39; => [
            &#39;driver&#39; => &#39;database&#39;,
            &#39;table&#39; => &#39;jobs&#39;,
            &#39;queue&#39; => &#39;default&#39;,
            &#39;retry_after&#39; => 90,
        ],
        &#39;beanstalkd&#39; => [
            &#39;driver&#39; => &#39;beanstalkd&#39;,
            &#39;host&#39; => &#39;localhost&#39;,
            &#39;queue&#39; => &#39;default&#39;,
            &#39;retry_after&#39; => 90,
        ],
        &#39;sqs&#39; => [
            &#39;driver&#39; => &#39;sqs&#39;,
            &#39;key&#39; => &#39;your-public-key&#39;,
            &#39;secret&#39; => &#39;your-secret-key&#39;,
            &#39;prefix&#39; => &#39;https://sqs.us-east-1.amazonaws.com/your-account-id&#39;,
            &#39;queue&#39; => &#39;your-queue-name&#39;,
            &#39;region&#39; => &#39;us-east-1&#39;,
        ],
        &#39;redis&#39; => [
            &#39;driver&#39; => &#39;redis&#39;,
            &#39;connection&#39; => &#39;default&#39;,
            &#39;queue&#39; => &#39;default&#39;,
            &#39;retry_after&#39; => 90,
        ],
    ],
    &#39;failed&#39; => [
        &#39;database&#39; => env(&#39;DB_CONNECTION&#39;, &#39;mysql&#39;),
        &#39;table&#39; => &#39;failed_jobs&#39;,
    ],
];
Copy after login

The configuration file uses the synchronization driver sync by default. Configuration for each queue driver can be found in this file, including database, Beanstalkd, Amazon SQS, and Redis. It also includes a null queue driver for tasks that abort the queue. The failed configuration item is used to configure the database and data table where failed queue tasks are stored.

Next we need to create a queue task class.

Create a queue task class, and then a SendEmail.php file will be generated in the app/Jobs directory

php artisan make:job SendEmail
Copy after login
<?php
namespace App\Jobs;
use App\User;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Support\Facades\Mail;
class SendEmail implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
    protected $user;
    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct(User $user)
    {
        $this->user = $user;
    }
    /**
     * 执行队列的方法 比如发送邮件
     *
     * @return void
     */
    public function handle()
    {
      $user = $this->user;
      
      Mail::raw(&#39;这里填写邮件的内容&#39;,function ($message){
             // 发件人(你自己的邮箱和名称)
            $message->from(&#39;your_email@163.com&#39;, &#39;yourname&#39;);
            // 收件人的邮箱地址
            $message->to($this->user);
            // 邮件主题
            $message->subject(&#39;队列发送邮件&#39;);
        });
    }
}
Copy after login

After the task class is created, go to the controller to add the data to the queue

Create a controller that sends messages and use the dispatch method to manually distribute tasks. Pass an instance of the task class in the method

<?php
namespace App\Http\Controllers;
use App\Jobs\SendEmail;
use App\User;
class MessageController extends Controller
{
    public function index()
    {
        $user = User::find(1);
        $this->dispatch(new SendEmail($user));
    }
}
Copy after login

Then access the browser, run the project and push the task to the queue. Then use the Artisan command to execute the tasks in the queue

php artisan queue:

● queue:work will only execute the queue request once by default, and will terminate when the request is completed;

● queue:listen listens to queue requests. As long as it is running, it can always accept requests unless manually terminated;

● queue:work --daemon is the same as listen. The difference is that work does not need to load the framework again. Run the task directly. It is generally recommended to use this to handle queue monitoring.

● Note: When using queue:work --daemon, when updating the code, you need to stop and then restart so that the modified code can be applied.

For more Laravel related technical articles, please visit the Laravel Framework Getting Started Tutorial column to learn!

The above is the detailed content of Laravel Queue Sending Mail. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:segmentfault.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template