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

Команда make:mail

Команда make:mail создаёт новый класс почтового сообщения в Laravel. Созданный класс располагается в каталоге app/Mail и используется для построения электронных писем. Обязательным параметром является имя класса. При создании также можно указать флаг --markdown, который создаст Blade-шаблон для письма. Метод build внутри класса определяет структуру письма: отправителя, тему, представление (view), данные и приложения.

Синтаксис

php artisan make:mail ClassName

Создание обычного почтового класса

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

<?php namespace AppMail; use IlluminateBusQueueable; use IlluminateMailMailable; use IlluminateMailMailablesContent; use IlluminateMailMailablesEnvelope; use IlluminateQueueSerializesModels; class WelcomeMail extends Mailable { use Queueable, SerializesModels; public $user; public function __construct($user) { $this->user = $user; } public function envelope(): Envelope { return new Envelope( subject: 'Welcome to our site', ); } public function content(): Content { return new Content( view: 'emails.welcome', ); } public function attachments(): array { return []; } } ?>

Создание почтового класса с Markdown-шаблоном

Для создания письма с использованием Markdown-шаблона используется флаг --markdown:

php artisan make:mail OrderShippedMail --markdown=emails.orders.shipped

После выполнения команды будет создан класс с настроенным Markdown-шаблоном:

<?php namespace AppMail; use IlluminateBusQueueable; use IlluminateMailMailable; use IlluminateMailMailablesContent; use IlluminateMailMailablesEnvelope; use IlluminateQueueSerializesModels; class OrderShippedMail extends Mailable { use Queueable, SerializesModels; public $order; public function __construct($order) { $this->order = $order; } public function envelope(): Envelope { return new Envelope( subject: 'Order Shipped', ); } public function content(): Content { return new Content( markdown: 'emails.orders.shipped', ); } public function attachments(): array { return []; } } ?>

Пример отправки письма

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

<?php namespace AppHttpControllers; use AppMailWelcomeMail; use AppModelsUser; use IlluminateSupportFacadesMail; class UserController extends Controller { public function sendWelcome($id) { $user = User::find($id); Mail::to($user->email)->send(new WelcomeMail($user)); return 'Welcome email sent successfully'; } } ?>

Создание Blade-шаблона для письма

Для письма требуется представление. Создадим Blade-шаблон в директории resources/views/emails:

<!DOCTYPE html> <html> <head> <title>Welcome</title> </head> <body> <h1>Welcome {{ $user->name }}</h1> <p>Thank you for registering on our site</p> <p>We are glad to see you</p> </body> </html>

Пример отправки письма с вложением

Добавим возможность прикрепления файлов к письму:

<?php namespace AppMail; use IlluminateBusQueueable; use IlluminateMailMailable; use IlluminateMailMailablesAttachment; use IlluminateMailMailablesContent; use IlluminateMailMailablesEnvelope; use IlluminateQueueSerializesModels; class InvoiceMail extends Mailable { use Queueable, SerializesModels; public $invoice; public function __construct($invoice) { $this->invoice = $invoice; } public function envelope(): Envelope { return new Envelope( subject: 'Your Invoice', ); } public function content(): Content { return new Content( view: 'emails.invoice', ); } public function attachments(): array { return [ Attachment::fromPath(storage_path('app/invoices/' . $this->invoice->file)) ->as('invoice.pdf') ->withMime('application/pdf'), ]; } } ?>

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

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

<?php namespace AppHttpControllers; use AppMailOrderShippedMail; use AppModelsOrder; use IlluminateSupportFacadesMail; class OrderController extends Controller { public function ship($id) { $order = Order::find($id); Mail::to($order->user->email) ->queue(new OrderShippedMail($order)); return 'Order shipped email queued'; } } ?>

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

  • команда make:controller,
    которая создаёт новый контроллер
  • команда make:job,
    которая создаёт новый класс для задания очереди
  • команда make:notification,
    которая создаёт новый класс уведомления
  • команда queue:work,
    которая запускает обработчик очереди
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить