Poner en cola los correos electrónicos
Comprar curso

200. Poner en cola los correos electrónicos

Aprende a poner en cola los correos electrónicos en Laravel utilizando la función de cola de tareas. Optimiza el rendimiento de tu aplicación y aumenta la eficiencia en el envío de correos electrónicos.


2 comentarios

Inicia sesión para comentar

Comentarios:

  • Victor Arana Flores

    Victor Arana Flores hace 1 año Destacado

    Aprende a optimizar el rendimiento de tu aplicación Laravel al poner en cola los correos electrónicos utilizando la función de cola de tareas. Al hacerlo, puedes aumentar la eficiencia en el envío de correos electrónicos y evitar la sobrecarga en el servidor.

    Para empezar, debes configurar la cola de tareas en Laravel. Esto se puede hacer mediante el uso del controlador de colas predeterminado que se encuentra en el archivo config/queue.php. Una vez que la cola está configurada, puedes agregar trabajos a la cola utilizando el comando "queue:push" de Laravel.

    Cuando se agregan trabajos a la cola, se procesan en segundo plano y no afectan el rendimiento de la aplicación en tiempo real. Además, puedes definir el tiempo de espera de la cola para evitar que los trabajos se ejecuten durante períodos de alta actividad en el servidor.

    Una vez que la cola está configurada y los trabajos están en la cola, puedes enviar correos electrónicos utilizando la función "Mail" de Laravel. Al hacerlo, Laravel los agregará automáticamente a la cola de tareas y los procesará en segundo plano.

    En resumen, al poner en cola los correos electrónicos utilizando la función de cola de tareas en Laravel, puedes optimizar el rendimiento de tu aplicación y aumentar la eficiencia en el envío de correos electrónicos. Esto te permite evitar la sobrecarga en el servidor y mejorar la experiencia del usuario en tu aplicación.

  • Ramon Brito

    Ramon Brito hace 1 semana

    Que tal aqui les dejo el codigo actualizado para que lo agreguen a sus proyecto con laravel 11 , los archivos se pueden enviar en cola, además es opcional y mantiene el nombre original del archivo  le recomiendo al profesor que actualise el curso asi como con ckeditor5 y este para que podamos avanzar con el curso pero lamentablemente el profe no responde las pregunta.
    
    estees el controlador
    <?php
    
    namespace App\Http\Controllers;
    
    use Illuminate\Http\Request;
    use App\Mail\ContactMailable;
    use Illuminate\Support\Facades\Mail;
    class ContactController extends Controller
    {
        //
        public function index(){
            return view('contacts.index');
        }
        public function store(Request $request)
        {
            $data = $request->validate([
                'name' => 'required|string|max:20',
                'email' => 'required|email',
                'message' => 'required|string|max:256',
            ]);
    
            if ($request->hasFile('file')) {
    
                $data['file'] = $request->file('file')->storeAs('contacts', $request->file('file')->getClientOriginalName());
    
            }
    
            try {
                Mail::to('contacto@britoacademy.com')->queue(new ContactMailable($data));
                session()->flash('flash.banner', 'El correo se envió satisfactoriamente.');
            } catch (\Exception $e) {
                session()->flash('flash.banner', 'Error al enviar el correo: ' . $e->getMessage());
            }
    
            return back();
        }
    
    
    
    }
     y este el mailable
     
     <?php
    
    namespace App\Mail;
    
    use Illuminate\Bus\Queueable;
    use Illuminate\Contracts\Queue\ShouldQueue;
    use Illuminate\Mail\Mailable;
    use Illuminate\Mail\Mailables\Content;
    use Illuminate\Mail\Mailables\Envelope;
    use Illuminate\Mail\Mailables\attachment;
    use Illuminate\Queue\SerializesModels;
    use Illuminate\Mail\Mailables\Address;
    
    
    
    class ContactMailable extends Mailable implements ShouldQueue
    {
    
        use Queueable, SerializesModels;
        public $data;
    
        /**
         * Create a new message instance.
         *
         * @return void
         */
        public function __construct($data)
        {
            //
            $this->data = $data;
        }
    
        /**
         * Get the message envelope.
         *
         * @return \Illuminate\Mail\Mailables\Envelope
         */
        public function envelope()
        {
            return new Envelope(
                from: new Address($this->data['email'], $this->data['name']),
                subject: 'Brito academy'
            );
        }
    
    
    
        /**
         * Get the message content definition.
         *
         * @return \Illuminate\Mail\Mailables\Content
         */
        public function content(): Content
        {
            return new Content(
                markdown: 'emails.contact',
                with: [
                    'data' => $this->data,
                ],
            );
        }
    
    
        /**
         * Get the attachments for the message.
         *
         * @return array
         */
    
    
        public function attachments(): array
        {
            $attachments = [];
    
        if (isset($this->data['file'])) {
            $attachments[] = Attachment::fromStorage($this->data['file'])
                ->as(basename($this->data['file'])) // Esto establece el nombre del archivo en el email
                ->withMime($this->data['file']->getMimeType()); // Esto define el tipo MIME del archivo
        }
    
    
            return $attachments;
            
            }
    
    }