Mailable - клас, що описує один тип листа: тему, відправника, шаблон, дані й вкладення. Створюється командою:
php artisan make:mail OrderShipped
Три основні методи:
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\{Address, Attachment, Content, Envelope};
class OrderShipped extends Mailable
{
use Queueable, SerializesModels;
public function __construct(public Order $order) {}
public function envelope(): Envelope
{
return new Envelope(
from: new Address('shop@example.com', 'Acme Shop'),
replyTo: [new Address('support@example.com')],
subject: "Замовлення №{$this->order->number} відправлено",
);
}
public function content(): Content
{
return new Content(
view: 'mail.orders.shipped',
text: 'mail.orders.shipped-text',
);
}
public function attachments(): array
{
return [
Attachment::fromStorageDisk('s3', $this->order->invoice_path)
->as('invoice.pdf')
->withMime('application/pdf'),
];
}
}
| Метод | Що визначає |
|---|---|
envelope() |
тема, відправник, reply-to, теги й метадані для провайдера |
content() |
Blade-шаблон HTML-версії, текстова версія, Markdown-шаблон |
attachments() |
вкладення з диска, сховища чи згенерованих даних |
Дані для шаблону: усі публічні властивості класу автоматично доступні у шаблоні ($order). Для обчислених значень - параметр with у Content.
Надсилання:
Mail::to($order->customer)
->cc($order->manager)
->send(new OrderShipped($order));
to() приймає email, модель з полями email і name або колекцію.
Глобальний відправник: щоб не вказувати from у кожному листі - MAIL_FROM_ADDRESS і MAIL_FROM_NAME в .env.
Корисні звички:
- текстова версія листа покращує доставлюваність і читання в простих клієнтах;
- великі файли краще не вкладати, а давати посилання (наприклад, підписаний URL);
- лист можна повернути з маршруту (
return new OrderShipped($order);) і переглянути в браузері під час розробки.