РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
830 of 1392 menu

Метод attachData

Метод attachData применяется к экземпляру класса Mailable и позволяет прикрепить к письму любые бинарные данные в виде вложения. Первым параметром передаются сами данные, вторым - имя файла, третьим (опциональным) - массив параметров вложения. Этот метод удобен, когда нужно отправить файл, сгенерированный динамически, без сохранения на диск.

Синтаксис

<?php $this->attachData($data, $filename, $options); ?>

Пример

Давайте создадим простой mailable класс и прикрепим к нему текстовые данные как вложение:

<?php namespace AppMail; use IlluminateBusQueueable; use IlluminateMailMailable; use IlluminateMailMailablesContent; use IlluminateMailMailablesEnvelope; use IlluminateQueueSerializesModels; class OrderConfirmation extends Mailable { use Queueable, SerializesModels; public function envelope(): Envelope { return new Envelope( subject: 'Order Confirmation', ); } public function content(): Content { return new Content( view: 'emails.order_confirmation', ); } public function attachments(): array { return [ $this->attachData( 'Invoice #12345: Order total $150.50', 'invoice.txt', [ 'mime' => 'text/plain', ] ), ]; } } ?>

Затем отправим письмо с помощью фасада Mail:

<?php namespace AppHttpControllers; use AppMailOrderConfirmation; use IlluminateSupportFacadesMail; class OrderController extends Controller { public function sendConfirmation() { $email = 'user@example.com'; Mail::to($email)->send(new OrderConfirmation()); echo "Email sent successfully"; } } ?>

Результат выполнения кода:

"Email sent successfully"

Пример

Давайте прикрепим к письму данные в формате JSON:

<?php namespace AppMail; use IlluminateBusQueueable; use IlluminateMailMailable; use IlluminateMailMailablesContent; use IlluminateMailMailablesEnvelope; use IlluminateQueueSerializesModels; class UserReport extends Mailable { use Queueable, SerializesModels; protected $users; public function __construct($users) { $this->users = $users; } public function envelope(): Envelope { return new Envelope( subject: 'User Report', ); } public function content(): Content { return new Content( view: 'emails.user_report', ); } public function attachments(): array { $jsonData = json_encode($this->users, JSON_PRETTY_PRINT); return [ $this->attachData( $jsonData, 'users_report.json', [ 'mime' => 'application/json', ] ), ]; } } ?>

Далее в контроллере создадим массив пользователей и отправим отчет:

<?php namespace AppHttpControllers; use AppMailUserReport; use IlluminateSupportFacadesMail; class UserController extends Controller { public function sendReport() { $users = [ ['id' => 1, 'name' => 'John', 'email' => 'john@example.com'], ['id' => 2, 'name' => 'Jane', 'email' => 'jane@example.com'], ['id' => 3, 'name' => 'Bob', 'email' => 'bob@example.com'], ]; $email = 'admin@example.com'; Mail::to($email)->send(new UserReport($users)); echo "Report sent successfully"; } } ?>

Результат выполнения кода:

"Report sent successfully"

Пример

Давайте создадим PDF-документ динамически с помощью библиотеки и прикрепим его к письму:

<?php namespace AppMail; use IlluminateBusQueueable; use IlluminateMailMailable; use IlluminateMailMailablesContent; use IlluminateMailMailablesEnvelope; use IlluminateQueueSerializesModels; class ReceiptMail extends Mailable { use Queueable, SerializesModels; public function envelope(): Envelope { return new Envelope( subject: 'Your Receipt', ); } public function content(): Content { return new Content( view: 'emails.receipt', ); } public function attachments(): array { $pdfData = $this->generatePdfContent(); return [ $this->attachData( $pdfData, 'receipt.pdf', [ 'mime' => 'application/pdf', ] ), ]; } private function generatePdfContent() { $content = '%PDF-1.4 1 0 obj << /Type /Catalog /Pages 2 0 R >> endobj 2 0 obj << /Type /Pages /Kids [3 0 R] /Count 1 >> endobj 3 0 obj << /Type /Page /Parent 2 0 R /MediaBox [0 0 612 792] /Contents 4 0 R >> endobj 4 0 obj << /Length 44 >> stream BT /F1 12 Tf 50 700 Td (Receipt #54321) Tj ET endstream endobj xref 0 5 0000000000 65535 f 0000000009 00000 n 0000000056 00000 n 0000000111 00000 n 0000000200 00000 n trailer << /Size 5 /Root 1 0 R >> startxref 286 %%EOF'; return $content; } } ?>

Отправим письмо с прикрепленным PDF:

<?php namespace AppHttpControllers; use AppMailReceiptMail; use IlluminateSupportFacadesMail; class ReceiptController extends Controller { public function sendReceipt() { $email = 'customer@example.com'; Mail::to($email)->send(new ReceiptMail()); echo "Receipt sent with PDF attachment"; } } ?>

Результат выполнения кода:

"Receipt sent with PDF attachment"

Смотрите также

  • класс Mailable,
    базовый класс для всех почтовых уведомлений
  • метод attach,
    который прикрепляет файл из файловой системы
  • метод attachFromStorage,
    который прикрепляет файл из хранилища
  • класс Mail,
    фасад для отправки электронной почты
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить