Команда 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,
которая запускает обработчик очереди