Olá pessoal! Hoje, vou orientar você no processo de criação de uma tarefa agendada no Laravel. Tomaremos o exemplo do envio diário de um e-mail de marketing aos usuários.
Primeiro, vamos criar uma nova classe Mailable usando o seguinte comando Artisan:
php artisan make:mail DailyMarketingEmail --view
Este comando gera uma nova classe Mailable no diretório App/Mail, junto com um arquivo de visualização correspondente, daily-marketing-email.blade.php, dentro do diretório resources/views/mail/. Você pode personalizar o conteúdo do e-mail neste arquivo de visualização.
A seguir, criaremos um comando Artisan que cuidará do envio de nosso DailyMarketingEmail. Execute o seguinte comando:
php artisan make:command SendDailyMarketingEmail
Este comando irá gerar uma nova classe de comando no diretório app/Console/Commands.
Depois de gerar seu comando, você verá duas propriedades principais na classe gerada:
protected $signature: Define o nome e a assinatura do seu comando Artisan.
protected $description: fornece uma descrição do seu comando.
O método handle nesta classe é onde você definirá a lógica do seu comando.
Depois que tudo estiver configurado, você pode listar todos os seus comandos do Artisan executando:
artesão php
Você deverá ver seu comando na lista:
Agora, vamos definir a lógica dentro do método handle para enviar os e-mails de marketing:
each(function ($user) { Mail::to($user->email)->send(new DailyMarketingEmail); }); } }
No método handle, recuperamos todos os usuários do banco de dados e enviamos para cada um deles o DailyMarketingEmail.
Você pode testar manualmente seu comando executando:
php artisan app:send-daily-marketing-emails
Considere usar ferramentas como Mailtrap ou MailHog para capturar e visualizar os e-mails enviados durante o teste.
Por fim, para automatizar o envio diário deste e-mail, precisamos agendar o comando no método de agendamento do arquivo Kernel.php localizado no diretório app/Console/:
command('app:send-daily-marketing-emails')->dailyAt('08:30'); } /** * Register the commands for the application. */ protected function commands(): void { $this->load(__DIR__.'/Commands'); require base_path('routes/console.php'); } }
Aqui, usamos o método dailyAt('08:30') para agendar o comando para ser executado todos os dias às 08h30. Você pode ajustar o tempo conforme necessário.
Enfileirar e-mails: para um grande número de usuários, é uma boa prática colocar os e-mails na fila em vez de enviá-los todos de uma vez. Isso pode ser feito implementando a interface ShouldQueue na classe Mailable.
Considerações sobre desempenho: para grandes bases de usuários, considere otimizar as consultas ao banco de dados e o processo de envio de e-mail para garantir um desempenho eficiente.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3