Метод later
Метод later класса Mail применяется для отложенной отправки электронных писем. Он помещает задачу отправки в очередь, которая будет выполнена через указанный промежуток времени. Первым параметром передаётся экземпляр класса Mailable, вторым - экземпляр или массив получателей to, третьим - время задержки в секундах или экземпляр DateTimeInterface.
Синтаксис
<?php
use Illuminate\Support\Facades\Mail;
Mail::later($mailable, $recipients, $delay);
?>
Пример
Давайте отправим приветственное письмо новому пользователю с задержкой в 10 минут:
<?php
use Illuminate\Support\Facades\Mail;
use App\Mail\WelcomeMail;
use App\Models\User;
$user = User::find(1);
$delay = 600; // 10 minutes
Mail::later(new WelcomeMail($user), $user->email, $delay);
?>
Пример
Отправим письмо нескольким получателям с задержкой в 30 минут с использованием Carbon:
<?php
use Illuminate\Support\Facades\Mail;
use App\Mail\NewsletterMail;
use Carbon\Carbon;
$recipients = ['user1@example.com', 'user2@example.com'];
$delay = Carbon::now()->addMinutes(30);
Mail::later(new NewsletterMail(), $recipients, $delay);
?>
Пример
Используем метод later с указанием конкретного соединения очереди:
<?php
use Illuminate\Support\Facades\Mail;
use App\Mail\ReportMail;
$mailable = new ReportMail();
$recipient = 'admin@example.com';
$delay = 3600; // 1 hour
Mail::mailer('redis')->later($mailable, $recipient, $delay);
?>
Пример
Отправим письмо с вложениями через 2 часа:
<?php
use Illuminate\Support\Facades\Mail;
use App\Mail\DocumentMail;
$mailable = (new DocumentMail())
->attach(storage_path('app/files/report.pdf'));
Mail::later($mailable, 'client@example.com', 7200);
?>