Метод attachments
Метод attachments класса Mailable используется для определения вложений, которые будут добавлены к письму. Внутри метода необходимо вернуть массив, содержащий определения вложений. Каждое вложение может быть добавлено с помощью методов attach, attachFromStorage или attachData. Если вы используете метод attachments, вы получаете полный контроль над всеми вложениями письма.
Синтаксис
<?php
use IlluminateMailMailablesAttachment;
protected function attachments(): array
{
return [
Attachment::fromPath('/path/to/file.pdf')
->as('filename.pdf')
->withMime('application/pdf'),
];
}
?>
Пример
Давайте создадим класс письма с вложением файла:
<?php
namespace AppMail;
use IlluminateBusQueueable;
use IlluminateMailMailable;
use IlluminateMailMailablesContent;
use IlluminateMailMailablesEnvelope;
use IlluminateMailMailablesAttachment;
use IlluminateQueueSerializesModels;
class InvoiceMail extends Mailable
{
use Queueable, SerializesModels;
public function envelope(): Envelope
{
return new Envelope(
subject: 'Your Invoice',
);
}
public function content(): Content
{
return new Content(
view: 'emails.invoice',
);
}
protected function attachments(): array
{
return [
Attachment::fromPath(storage_path('app/invoices/invoice_123.pdf'))
->as('invoice_123.pdf')
->withMime('application/pdf'),
];
}
}
?>
Пример
Давайте добавим несколько вложений разных типов:
<?php
namespace AppMail;
use IlluminateBusQueueable;
use IlluminateMailMailable;
use IlluminateMailMailablesContent;
use IlluminateMailMailablesEnvelope;
use IlluminateMailMailablesAttachment;
use IlluminateQueueSerializesModels;
class ReportMail extends Mailable
{
use Queueable, SerializesModels;
public function envelope(): Envelope
{
return new Envelope(
subject: 'Monthly Report',
);
}
public function content(): Content
{
return new Content(
view: 'emails.report',
);
}
protected function attachments(): array
{
return [
Attachment::fromPath(storage_path('app/reports/monthly.pdf'))
->as('monthly_report.pdf')
->withMime('application/pdf'),
Attachment::fromPath(storage_path('app/reports/data.csv'))
->as('data.csv')
->withMime('text/csv'),
Attachment::fromPath(storage_path('app/reports/cover.jpg'))
->as('cover.jpg')
->withMime('image/jpeg'),
];
}
}
?>
Пример
Давайте используем вложение из хранилища Laravel:
<?php
namespace AppMail;
use IlluminateBusQueueable;
use IlluminateMailMailable;
use IlluminateMailMailablesContent;
use IlluminateMailMailablesEnvelope;
use IlluminateMailMailablesAttachment;
use IlluminateQueueSerializesModels;
use IlluminateSupportFacadesStorage;
class DocumentMail extends Mailable
{
use Queueable, SerializesModels;
protected $documentId;
public function __construct($documentId)
{
$this->documentId = $documentId;
}
public function envelope(): Envelope
{
return new Envelope(
subject: 'Your Document',
);
}
public function content(): Content
{
return new Content(
view: 'emails.document',
);
}
protected function attachments(): array
{
$path = "documents/document_{$this->documentId}.pdf";
if (Storage::disk('public')->exists($path)) {
return [
Attachment::fromStorage($path)
->as("document_{$this->documentId}.pdf")
->withMime('application/pdf'),
];
}
return [];
}
}
?>
Пример
Давайте отправим письмо с вложениями через фасад Mail:
<?php
namespace AppHttpControllers;
use AppMailInvoiceMail;
use IlluminateSupportFacadesMail;
class MailController extends Controller
{
public function sendInvoice()
{
$res = Mail::to('user@example.com')->send(new InvoiceMail());
if ($res) {
echo "Invoice sent successfully";
} else {
echo "Failed to send invoice";
}
}
}
?>
Результат выполнения кода:
"Invoice sent successfully"
Смотрите также
-
класс
Mailable,
который является базовым классом для всех писем -
метод
attach,
который добавляет одно вложение к письму -
метод
attachFromStorage,
который добавляет вложение из хранилища -
метод
attachData,
который добавляет вложение из строковых данных