Увійти Реєстрація
Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Документація Співбесіди Тестування Відео
Екосистема
Пакети Ресурси Проєкти Інструменти Події
Інше
Про нас Реклама

З чого складається клас Mailable у Laravel: envelope, content і attachments?

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);) і переглянути в браузері під час розробки.

Докладніше в документації: Пошта: написання mailable-класів

Схожі питання