Метод attach
Метод attach применяется к объекту класса Mailable и позволяет прикреплять файлы к письму перед его отправкой. Первым параметром передаётся путь к файлу в файловой системе, вторым - массив опций (необязательно), который может содержать ключи 'as' (имя файла в письме), 'mime' (MIME-тип) и 'disk' (диск файловой системы).
Синтаксис
<?php
return $this->attach($path, $options);
?>
Пример
Давайте создадим класс письма и прикрепим к нему файл из локальной файловой системы:
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Attachment;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
use Illuminate\Queue\SerializesModels;
class WelcomeMail extends Mailable
{
use Queueable, SerializesModels;
public function envelope(): Envelope
{
return new Envelope(
subject: 'Welcome to our application',
);
}
public function content(): Content
{
return new Content(
view: 'emails.welcome',
);
}
public function attachments(): array
{
return [
Attachment::fromPath('/path/to/file.pdf'),
];
}
}
?>
Результат выполнения кода:
"PDF file attached to email"
Пример
Давайте прикрепим файл с указанием имени и MIME-типа:
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Attachment;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
use Illuminate\Queue\SerializesModels;
class DocumentMail extends Mailable
{
use Queueable, SerializesModels;
public function envelope(): Envelope
{
return new Envelope(
subject: 'Important documents',
);
}
public function content(): Content
{
return new Content(
view: 'emails.documents',
);
}
public function attachments(): array
{
return [
Attachment::fromPath('/path/to/document.pdf')
->as('report.pdf')
->withMime('application/pdf'),
];
}
}
?>
Результат выполнения кода:
"PDF report attached to email"
Пример
Давайте прикрепим файл из другого диска (например, S3):
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Attachment;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
use Illuminate\Queue\SerializesModels;
class StorageMail extends Mailable
{
use Queueable, SerializesModels;
public function envelope(): Envelope
{
return new Envelope(
subject: 'Storage files',
);
}
public function content(): Content
{
return new Content(
view: 'emails.storage',
);
}
public function attachments(): array
{
return [
Attachment::fromStorage('/path/to/file.txt')
->as('file.txt')
->withMime('text/plain'),
];
}
}
?>
Результат выполнения кода:
"Text file from storage attached"
Смотрите также
-
метод
attachFromStorage,
который прикрепляет файл из хранилища -
метод
attachData,
который прикрепляет данные как файл -
метод
attachments,
который возвращает массив прикреплений -
класс
Mailable,
который представляет письмо в Laravel