clicko-informatica-enviar-correos-laravel-queues

Hoy en el Blog de CLiCKO aprenderemos a enviar correos electrónicos utilizando las colas de Laravel.

Las colas de Laravel nos permiten aplazar el procesamiento de una tarea que consume tiempo, como enviar un correo electrónico, hasta un momento posterior. Aplazar estas tareas que consumen mucho tiempo acelera drásticamente las solicitudes web de nuestra aplicación.

El archivo de configuración de la cola se almacena en config / queue.php. En este archivo están las configuraciones de conexión para cada uno de los controladores de cola que se incluyen con el framework.

Paso 1: Configurar Laravel

En primer lugar, necesitamos iniciar una nueva instalación de Laravel 5.7 utilizando el siguiente comando:

composer create-project --prefer-dist laravel/laravel blog

Paso 2: Crear configuración de correo

En primer lugar crearemos un email para hacer pruebas utilizando la facade de Laravel Mail. Para eso utilizamos el siguiente comando:

php artisan make:mail SendEmailTest

Ahora tendremos un una nueva carpeta “Mail” en el directorio de nuestra app en el que crearemos este archivo:

app/Mail/SendEmailTest.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php

namespace App\Mail;

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

class SendEmailTest extends Mailable
{
    use Queueable, SerializesModels;

    /**
     * Create a new message instance.
     *
     * @return void
     */

    public function __construct()
    {

    }

    /**
     * Build the message.
     *
     * @return $this
     */

    public function build()
    {
        return $this->view('emails.test');
    }
}

Ahora necesitaremos crear una view para el envio de emails. Crearemos un archivo en la siguiente ubicación:
resources/views/emails/test.blade.php

<!DOCTYPE html>
<html>
    <head>
        <title>Test Email</title>
    </head>
    <body>
        <h1>Prueba de email</h1>
    </body>
</html>

Después de crear nuestra view necesitaremos editar nuestro archivo .env con los datos de la cuenta de correo que utilizaremos.

.env

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=xyz@gmail.com
MAIL_PASSWORD=123456
MAIL_ENCRYPTION=tls

Paso 3: Configurar Queue

En el siguiente paso, realizaremos la configuración en el controlador de cola, volveremos a editar el archivo de configuración:

.env

QUEUE_CONNECTION=database

Después necesitaremos generar la migracion y crear las tablas para la cola. Así que ejecutemos el siguiente comando:

Generar migración:

php artisan queue:table

Ejecutar migración:

php artisan migrate

Paso 4: Crear el Queue

Ahora que ya tenemos configurado las opciones para nuestra cola, crearemos un “Job” para poder ejecutarla. Utilizaremos el siguiente comando:

php artisan make:job SendEmailJob

Esto nos creara el archivo “SendEmailJob.php” en nuestro directorio “Jobs”. Tendremos que editar este archivo y poner lo siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?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\Mail\SendEmailTest;
use Mail;

class SendEmailJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    protected $details;

    /**
     * Create a new job instance.
     *
     * @return void
     */


    public function __construct($details)
    {
        $this->details = $details;
    }

    /**
     * Execute the job.
     *
     * @return void
     */


    public function handle()
    {
        $email = new SendEmailTest();

        Mail::to($this->details['email'])->send($email);
    }
}

Paso 5: Probar el Laravel Queue

Después de hacer los otros pasos ya podemos probar si nuestra Queue funciona correctamente, para eso tendremos que crear una ruta nueva en nuestro fichero de rutas de la siguiente forma:

routes/web.php

Route::get('email-test', function(){
    $details['email'] = 'your_email@gmail.com';
    dispatch(new App\Jobs\SendEmailJob($details));
    dd('done');
});

Una vez tenemos la ruta definida podemos ver el proceso de nuestra cola utilizando el comando

php artisan queue:listen

Finalmente para que nuestro proyecto funcione accederemos al siguiente link:

http://localhost:8000/email-test
Facebook
Facebook
Twitter
Visit Us
LinkedIn