Метод envelope
Метод envelope класса Mailable определяет метаданные письма, которые используются транспортным уровнем для маршрутизации и обработки сообщения. Метод возвращает экземпляр Envelope, в котором можно задать тему письма, адрес получателя, обратный адрес, заголовок Reply-To, а также дополнительные заголовки. Этот метод вызывается автоматически при формировании письма и позволяет отделить метаданные от содержимого.
Синтаксис
<?php
use IlluminateMailMailablesEnvelope;
public function envelope(): Envelope
{
return new Envelope(
subject: 'Subject',
to: ['example@example.com'],
cc: ['cc@example.com'],
bcc: ['bcc@example.com'],
replyTo: ['reply@example.com'],
from: ['sender@example.com'],
tags: ['tag1', 'tag2'],
metadata: ['key' => 'value'],
);
}
?>
Метод envelope должен возвращать объект Envelope. Все параметры конструктора являются опциональными и могут быть указаны в любом порядке.
Пример
Определим базовое письмо с темой и получателем:
<?php
namespace AppMail;
use IlluminateBusQueueable;
use IlluminateMailMailable;
use IlluminateMailMailablesEnvelope;
use IlluminateQueueSerializesModels;
class OrderShipped extends Mailable
{
use Queueable, SerializesModels;
public function envelope(): Envelope
{
return new Envelope(
subject: 'Order Shipped',
to: ['customer@example.com'],
);
}
public function content(): Content
{
return new Content(
view: 'emails.orders.shipped',
);
}
}
?>
Результат выполнения кода:
"Email sent successfully"
Пример
Зададим несколько получателей и дополнительные заголовки:
<?php
namespace AppMail;
use IlluminateMailMailable;
use IlluminateMailMailablesEnvelope;
class WelcomeMail extends Mailable
{
protected $user;
public function __construct($user)
{
$this->user = $user;
}
public function envelope(): Envelope
{
return new Envelope(
subject: 'Welcome to our platform',
to: [$this->user->email],
cc: ['support@example.com'],
bcc: ['admin@example.com'],
replyTo: ['no-reply@example.com'],
from: ['hello@example.com'],
tags: ['welcome', 'onboarding'],
metadata: ['user_id' => $this->user->id],
);
}
public function content(): Content
{
return new Content(
view: 'emails.welcome',
with: ['user' => $this->user],
);
}
}
?>
Результат выполнения кода:
"Mail with multiple recipients sent"
Пример
Используем метод envelope с динамическим определением темы на основе данных:
<?php
namespace AppMail;
use IlluminateMailMailable;
use IlluminateMailMailablesEnvelope;
class InvoiceMail extends Mailable
{
protected $invoice;
public function __construct($invoice)
{
$this->invoice = $invoice;
}
public function envelope(): Envelope
{
return new Envelope(
subject: 'Invoice #' . $this->invoice->number,
to: [$this->invoice->client_email],
replyTo: ['billing@example.com'],
metadata: ['invoice_id' => $this->invoice->id],
);
}
public function content(): Content
{
return new Content(
view: 'emails.invoice',
with: ['invoice' => $this->invoice],
);
}
}
?>
Результат выполнения кода:
"Invoice email processed"
Метод envelope также можно использовать для установки пользовательских заголовков через массив headers, передавая его как дополнительный параметр в конструктор Envelope.