Класс MailMessage
Класс MailMessage предназначен для создания простых, но красивых почтовых уведомлений в Laravel. Он предоставляет удобный интерфейс для построения электронных писем без необходимости создавать отдельные классы Mailable. Этот класс особенно полезен при отправке уведомлений через систему уведомлений Laravel, где требуется быстро сформировать письмо с базовым форматированием.
Основное преимущество MailMessage заключается в использовании предопределённых Markdown-шаблонов, которые автоматически адаптируются под различные почтовые клиенты. Класс предоставляет методы для добавления приветствия, строк текста, кнопок действий и прощальной фразы. Все сообщения строятся на основе готового компонента mail::message, что обеспечивает единообразный стиль для всех уведомлений.
Синтаксис
<?php
use Illuminate\Notifications\Messages\MailMessage;
$mailMessage = new MailMessage();
$mailMessage->greeting('Hello!')
->line('This is a notification.')
->action('Visit Website', url('/'))
->salutation('Regards, Team');
?>
Метод greeting - добавление приветствия
Метод greeting устанавливает приветственную фразу в начале письма. Если приветствие не задано, по умолчанию используется "Hello!".
<?php
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Support\Facades\Notification;
use App\Models\User;
$user = User::find(1);
$mailMessage = (new MailMessage())
->greeting('Welcome, ' . $user->name)
->line('Thank you for registering on our platform.')
->line('We are glad to see you here!');
Notification::send($user, new class($mailMessage) extends \Illuminate\Notifications\Notification {
public function toMail($notifiable)
{
return $this->mailMessage;
}
});
?>
Метод line - добавление строк текста
Метод line добавляет одну или несколько строк текста в тело письма. Каждая строка автоматически оборачивается в соответствующий HTML-тег при рендеринге Markdown-шаблона.
<?php
use Illuminate\Notifications\Messages\MailMessage;
$mailMessage = (new MailMessage())
->greeting('Hello!')
->line('Your account has been successfully created.')
->line('Please verify your email address.')
->line('If you did not create this account, no further action is required.');
?>
Метод action - добавление кнопки действия
Метод action добавляет кнопку с указанным текстом и ссылкой. Кнопка выделяется визуально и привлекает внимание пользователя к основному действию, которое необходимо выполнить.
<?php
use Illuminate\Notifications\Messages\MailMessage;
$resetLink = url('/password/reset', ['token' => 'abc123']);
$mailMessage = (new MailMessage())
->greeting('Password Reset Request')
->line('We received a request to reset your password.')
->action('Reset Password', $resetLink)
->line('This link will expire in 60 minutes.')
->salutation('Regards, Support Team');
?>
Метод subject - установка темы письма
Метод subject позволяет явно задать тему письма. Если метод не вызван, тема письма будет сгенерирована автоматически на основе содержимого письма или класса уведомления.
<?php
use Illuminate\Notifications\Messages\MailMessage;
$mailMessage = (new MailMessage())
->subject('Important: Account Verification')
->greeting('Hello!')
->line('Please verify your email address to continue.')
->action('Verify Email', url('/verify'))
->salutation('Best regards, Team');
?>
Метод error - установка стиля ошибки
Метод error изменяет оформление письма, делая его более тревожным или серьёзным. Обычно используется для сообщений об ошибках, предупреждениях или критических уведомлениях.
<?php
use Illuminate\Notifications\Messages\MailMessage;
$mailMessage = (new MailMessage())
->error()
->greeting('Payment Failed')
->line('Your recent payment could not be processed.')
->line('Please update your payment information.')
->action('Update Payment', url('/payment'));
?>
Метод success - установка стиля успеха
Метод success делает оформление письма позитивным, используя зелёные тона для кнопок и акцентов. Этот метод полезен для подтверждения успешных действий.
<?php
use Illuminate\Notifications\Messages\MailMessage;
$mailMessage = (new MailMessage())
->success()
->greeting('Welcome aboard!')
->line('Your account has been successfully created.')
->line('You can now access all features of our platform.')
->action('Go to Dashboard', url('/dashboard'))
->salutation('Enjoy your journey!');
?>
Метод salutation - установка прощальной фразы
Метод salutation добавляет прощальную фразу в конце письма. По умолчанию используется "Regards, Laravel" если метод не вызван.
<?php
use Illuminate\Notifications\Messages\MailMessage;
$mailMessage = (new MailMessage())
->greeting('Thank you!')
->line('Your subscription has been renewed.')
->salutation('With best wishes, Your Company Team');
?>
Метод view - использование пользовательского шаблона
Метод view позволяет использовать собственный Blade-шаблон для письма вместо стандартного Markdown-шаблона. Это даёт полный контроль над внешним видом письма.
<?php
namespace App\Http\Controllers;
use Illuminate\Notifications\Messages\MailMessage;
use Illuminate\Support\Facades\Notification;
use App\Models\User;
use Illuminate\Notifications\Notification;
class NotificationController extends Controller
{
public function send()
{
$user = User::find(1);
$mailMessage = (new MailMessage())
->view('emails.custom', ['name' => $user->name]);
Notification::send($user, new class($mailMessage) extends Notification {
protected $mailMessage;
public function __construct($mailMessage)
{
$this->mailMessage = $mailMessage;
}
public function toMail($notifiable)
{
return $this->mailMessage;
}
});
return response()->json(['message' => 'Notification sent']);
}
}
?>
Метод markdown - указание Markdown-шаблона
Метод markdown позволяет указать собственный Markdown-шаблон для письма, отличный от стандартного. Это полезно для создания уникального стиля уведомлений.
<?php
use Illuminate\Notifications\Messages\MailMessage;
$mailMessage = (new MailMessage())
->markdown('vendor.notifications.email', [
'color' => 'blue',
'name' => 'John Doe'
])
->greeting('Custom greeting')
->line('This email uses custom markdown template.');
?>
Полный пример использования в уведомлении
Рассмотрим полный пример создания класса уведомления с использованием MailMessage для отправки письма о подтверждении заказа.
<?php
namespace App\Notifications;
use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Notifications\Messages\MailMessage;
use App\Models\Order;
class OrderConfirmation extends Notification
{
use Queueable;
protected $order;
public function __construct(Order $order)
{
$this->order = $order;
}
public function via($notifiable)
{
return ['mail'];
}
public function toMail($notifiable)
{
$total = $this->order->total;
return (new MailMessage)
->success()
->subject('Order Confirmation #' . $this->order->id)
->greeting('Thank you for your order!')
->line('Your order has been successfully placed.')
->line('Order Number: ' . $this->order->id)
->line('Total Amount: $' . $total)
->action('View Order', url('/orders/' . $this->order->id))
->line('We will notify you when your order ships.')
->salutation('Thank you for choosing us!');
}
}
?>
Отправка уведомления
Пример отправки созданного уведомления пользователю с использованием фасада Notification.
<?php
namespace App\Http\Controllers;
use App\Models\Order;
use App\Models\User;
use App\Notifications\OrderConfirmation;
use Illuminate\Support\Facades\Notification;
class OrderController extends Controller
{
public function store()
{
$order = Order::create([
'user_id' => 1,
'total' => 150.00,
'status' => 'pending'
]);
$user = User::find(1);
Notification::send($user, new OrderConfirmation($order));
return response()->json(['message' => 'Order created and notification sent']);
}
}
?>
Смотрите также
-
класс
Mailable,
предназначенный для построения сложных почтовых сообщений -
метод
send,
который отправляет уведомление получателю -
метод
notify,
который отправляет уведомление модели -
класс
Notification,
который управляет отправкой уведомлений