РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
819 of 1392 menu

Метод queue

Метод queue класса Mail применяется для постановки письма в очередь на отправку. Он работает асинхронно и не блокирует выполнение основного кода. Первым параметром передаётся класс Mailable, вторым - массив данных для передачи в представление, третьим - экземпляр замыкания для настройки сообщения.

Синтаксис

<?php Mail::queue($mailable, $data, $callback); ?>

Пример

Создадим класс Mailable для приветственного письма:

<?php namespace AppMail; use IlluminateBusQueueable; use IlluminateMailMailable; use IlluminateMailMailablesContent; use IlluminateQueueSerializesModels; class WelcomeMail extends Mailable { use Queueable, SerializesModels; public $user; public function __construct($user) { $this->user = $user; } public function content(): Content { return new Content( view: 'emails.welcome', ); } } ?>

Отправим письмо через очередь с данными пользователя:

<?php namespace AppHttpControllers; use AppMailWelcomeMail; use AppModelsUser; use IlluminateSupportFacadesMail; class UserController extends Controller { public function register() { $user = User::create([ 'name' => 'John Doe', 'email' => 'john@example.com', ]); Mail::queue(new WelcomeMail($user)); return redirect()->route('home'); } } ?>

Результат выполнения кода:

"Письмо добавлено в очередь на отправку"

Пример с замыканием

Отправим письмо через очередь с дополнительной настройкой через замыкание:

<?php namespace AppHttpControllers; use AppMailOrderConfirmation; use IlluminateSupportFacadesMail; class OrderController extends Controller { public function placeOrder() { $order = ['id' => 123, 'total' => 99.99]; Mail::queue(new OrderConfirmation($order), [], function ($message) { $message->from('orders@example.com', 'Online Store'); $message->subject('Order Confirmation #123'); }); return response()->json(['status' => 'Order placed']); } } ?>

Результат выполнения кода:

{"status": "Order placed"}

Пример с использованием очереди в фоновом режиме

Запустим обработку очереди для отправки всех отложенных писем:

<?php namespace AppConsole; use IlluminateConsoleSchedulingSchedule; use IlluminateFoundationConsoleKernel as ConsoleKernel; class Kernel extends ConsoleKernel { protected function schedule(Schedule $schedule) { $schedule->command('queue:work')->everyMinute(); } } ?>

Запустим обработчик очереди вручную из консоли:

"php artisan queue:work"

Смотрите также

  • класс Mail,
    основной класс для работы с отправкой электронной почты
  • метод to,
    который указывает получателя письма
  • метод send,
    который отправляет письмо немедленно
  • метод later,
    который откладывает отправку письма на указанное время
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить