Метод attachFromStorage
Метод attachFromStorage применяется к объекту Mailable и позволяет прикрепить к письму файл, который находится в файловой системе, настроенной через Laravel Storage. Первым параметром передаётся путь к файлу в хранилище, вторым - имя файла, которое будет отображаться в письме, третьим - опциональные настройки (mime-тип, диск и другие параметры). Если диск не указан, используется диск по умолчанию.
Синтаксис
<?php
$mailable->attachFromStorage($path, $name, $options);
?>
Пример
Давайте создадим класс письма и прикрепим к нему файл из хранилища:
<?php
namespace AppMail;
use IlluminateBusQueueable;
use IlluminateMailMailable;
use IlluminateMailMailablesContent;
use IlluminateQueueSerializesModels;
class OrderConfirmation extends Mailable
{
use Queueable, SerializesModels;
public function __construct()
{
//
}
public function envelope()
{
return new Envelope(
subject: 'Order Confirmation',
);
}
public function content()
{
return new Content(
view: 'emails.order-confirmation',
);
}
public function attachments()
{
return [
$this->attachFromStorage(
'invoices/invoice_123.pdf',
'invoice_123.pdf',
['mime' => 'application/pdf']
),
];
}
}
?>
Пример
Прикрепим файл из хранилища с указанием диска и дополнительных параметров:
<?php
namespace AppMail;
use IlluminateBusQueueable;
use IlluminateMailMailable;
use IlluminateMailMailablesContent;
use IlluminateQueueSerializesModels;
class UserReport extends Mailable
{
use Queueable, SerializesModels;
protected $userId;
public function __construct($userId)
{
$this->userId = $userId;
}
public function envelope()
{
return new Envelope(
subject: 'User Report',
);
}
public function content()
{
return new Content(
view: 'emails.user-report',
);
}
public function attachments()
{
return [
$this->attachFromStorage(
'reports/user_' . $this->userId . '.csv',
'user_data.csv',
[
'mime' => 'text/csv',
'disk' => 's3',
'as' => 'user_report.csv'
]
),
];
}
}
?>
Пример
Отправим письмо с несколькими прикреплёнными файлами из разных дисков:
<?php
namespace AppMail;
use IlluminateBusQueueable;
use IlluminateMailMailable;
use IlluminateMailMailablesContent;
use IlluminateQueueSerializesModels;
class MultiAttachmentMail extends Mailable
{
use Queueable, SerializesModels;
public function __construct()
{
//
}
public function envelope()
{
return new Envelope(
subject: 'Multiple Attachments',
);
}
public function content()
{
return new Content(
view: 'emails.attachments',
);
}
public function attachments()
{
return [
$this->attachFromStorage(
'files/document.pdf',
'document.pdf'
),
$this->attachFromStorage(
'images/photo.jpg',
'photo.jpg',
['mime' => 'image/jpeg', 'disk' => 'public']
),
$this->attachFromStorage(
'archive/data.zip',
'backup.zip',
['mime' => 'application/zip']
),
];
}
}
?>
Пример
Отправим письмо из контроллера с динамическим прикреплением файла:
<?php
namespace AppHttpControllers;
use AppMailUserReport;
use IlluminateSupportFacadesMail;
class ReportController extends Controller
{
public function sendReport($userId)
{
$mail = new UserReport($userId);
Mail::to('user@example.com')->send($mail);
$res = 'Email sent successfully';
echo $res;
}
}
?>
Результат выполнения кода:
"Email sent successfully"
Смотрите также
-
метод
attach,
который прикрепляет файл по указанному пути -
метод
attachData,
который прикрепляет сырые данные как файл -
метод
attachments,
который возвращает массив всех вложений -
метод
send,
который отправляет письмо получателю