Junior: питання на співбесіді з теми «Пошта»
Питання з реальних співбесід з відповідями: Laravel і PHP, бази даних, JavaScript і фронтенд, Git, Docker, API, безпека й архітектура. Тими самими темами, що й тести.
2 питання
Лист описується класом Mailable, шаблон - Blade або Markdown.
php artisan make:mail WelcomeEmail --markdown=emails.welcome
Mail::to($user)->send(new WelcomeEmail($user));
Налаштування транспорту (SMTP, Mailgun, SES, log) - у config/mail.php та .env. Реалізувавши ShouldQueue на Mailable, відправку можна винести в чергу, щоб не блокувати запит.
Mailable - клас, що описує один тип листа: тему, відправника, шаблон, дані й вкладення. Створюється командою:
php artisan make:mail OrderShipped
Три основні методи:
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\{Address, Attachment, Content, Envelope};
class OrderShipped extends Mailable
{
use Queueable, SerializesModels;
public function __construct(public Order $order) {}
public function envelope(): Envelope
{
return new Envelope(
from: new Address('shop@example.com', 'Acme Shop'),
replyTo: [new Address('support@example.com')],
subject: "Замовлення №{$this->order->number} відправлено",
);
}
public function content(): Content
{
return new Content(
view: 'mail.orders.shipped',
text: 'mail.orders.shipped-text',
);
}
public function attachments(): array
{
return [
Attachment::fromStorageDisk('s3', $this->order->invoice_path)
->as('invoice.pdf')
->withMime('application/pdf'),
];
}
}
| Метод | Що визначає |
|---|---|
envelope() |
тема, відправник, reply-to, теги й метадані для провайдера |
content() |
Blade-шаблон HTML-версії, текстова версія, Markdown-шаблон |
attachments() |
вкладення з диска, сховища чи згенерованих даних |
Дані для шаблону: усі публічні властивості класу автоматично доступні у шаблоні ($order). Для обчислених значень - параметр with у Content.
Надсилання:
Mail::to($order->customer)
->cc($order->manager)
->send(new OrderShipped($order));
to() приймає email, модель з полями email і name або колекцію.
Глобальний відправник: щоб не вказувати from у кожному листі - MAIL_FROM_ADDRESS і MAIL_FROM_NAME в .env.
Корисні звички:
- текстова версія листа покращує доставлюваність і читання в простих клієнтах;
- великі файли краще не вкладати, а давати посилання (наприклад, підписаний URL);
- лист можна повернути з маршруту (
return new OrderShipped($order);) і переглянути в браузері під час розробки.