Класс Mail
Класс Mail используется для отправки email-сообщений в Laravel. Он предоставляет простой и выразительный API для построения писем с использованием Mailable-классов. Основные методы класса: send - немедленная отправка, queue - отправка через очередь, later - отложенная отправка, raw - отправка простого текста, html - отправка HTML-письма, to - установка получателя, mailer - выбор почтового драйвера.
Синтаксис
<?php
use Illuminate\Support\Facades\Mail;
Mail::send($mailable);
Mail::to($recipient)->send($mailable);
Mail::queue($mailable);
Mail::later($delay, $mailable);
Mail::raw($content, $callback);
Mail::html($html, $callback);
?>
Пример отправки Mailable-класса
Создадим Mailable-класс для приветственного письма:
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
use Illuminate\Queue\SerializesModels;
class WelcomeMail extends Mailable
{
use Queueable, SerializesModels;
public $user;
public function __construct($user)
{
$this->user = $user;
}
public function envelope(): Envelope
{
return new Envelope(
subject: 'Welcome to our platform',
);
}
public function content(): Content
{
return new Content(
view: 'emails.welcome',
with: ['user' => $this->user],
);
}
}
?>
Шаблон письма:
<html>
<body>
<h1>Hello {{ $user->name }}!</h1>
<p>Welcome to our platform. We're glad to have you on board.</p>
<p>Thank you for joining us.</p>
</body>
</html>
Отправка письма в контроллере:
<?php
namespace App\Http\Controllers;
use App\Mail\WelcomeMail;
use App\Models\User;
use Illuminate\Support\Facades\Mail;
class UserController extends Controller
{
public function register()
{
$user = User::find(1);
Mail::to($user->email)->send(new WelcomeMail($user));
return 'Email sent successfully!';
}
}
?>
Результат выполнения кода:
"Email sent successfully!"
Пример отправки через очередь
Для отправки писем через очередь используйте метод queue:
<?php
namespace App\Http\Controllers;
use App\Mail\WelcomeMail;
use App\Models\User;
use Illuminate\Support\Facades\Mail;
class UserController extends Controller
{
public function register()
{
$user = User::find(1);
Mail::to($user->email)->queue(new WelcomeMail($user));
return 'Email queued successfully!';
}
}
?>
Результат выполнения кода:
"Email queued successfully!"
Пример отложенной отправки
Метод later позволяет отправить письмо с задержкой:
<?php
namespace App\Http\Controllers;
use App\Mail\WelcomeMail;
use App\Models\User;
use Illuminate\Support\Facades\Mail;
use Carbon\Carbon;
class UserController extends Controller
{
public function register()
{
$user = User::find(1);
$delay = Carbon::now()->addMinutes(10);
Mail::to($user->email)->later($delay, new WelcomeMail($user));
return 'Email scheduled for later!';
}
}
?>
Результат выполнения кода:
"Email scheduled for later!"
Пример отправки сырого текста
Метод raw отправляет простое текстовое письмо без шаблона:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Mail;
class UserController extends Controller
{
public function sendRawEmail()
{
Mail::raw('This is a test email sent from Laravel.', function ($message) {
$message->to('user@example.com')
->subject('Test Raw Email');
});
return 'Raw email sent!';
}
}
?>
Результат выполнения кода:
"Raw email sent!"
Пример отправки HTML-письма
Метод html отправляет письмо с HTML-содержимым:
<?php
namespace App\Http\Controllers;
use Illuminate\Support\Facades\Mail;
class UserController extends Controller
{
public function sendHtmlEmail()
{
$html = '<h1>Welcome!</h1><p>This is an HTML email from Laravel.</p>';
Mail::html($html, function ($message) {
$message->to('user@example.com')
->subject('Test HTML Email');
});
return 'HTML email sent!';
}
}
?>
Результат выполнения кода:
"HTML email sent!"
Пример с несколькими получателями
Метод to может принимать массив адресов:
<?php
namespace App\Http\Controllers;
use App\Mail\WelcomeMail;
use Illuminate\Support\Facades\Mail;
class UserController extends Controller
{
public function sendToMultiple()
{
$recipients = ['user1@example.com', 'user2@example.com'];
Mail::to($recipients)->send(new WelcomeMail((object) ['name' => 'Guest']));
return 'Emails sent to multiple recipients!';
}
}
?>
Результат выполнения кода:
"Emails sent to multiple recipients!"