Отправка электронных писем в Laravel

Laravel поставляется с отличной поддержкой почты из коробки, но вам всё равно нужен надёжный сервис доставки. Пакет Emailit Laravel интегрируется напрямую в почтовую систему Laravel как нативный транспорт. Ваши существующие Mailables, уведомления и вызовы Mail::send() работают без изменений в коде. Кроме того, вы получаете полный доступ к API Emailit через удобный Facade.
Отправка электронных писем — одна из самых распространённых задач в любом Laravel-приложении. Подтверждения регистрации пользователей, сброс паролей, чеки заказов, уведомления о доставке и маркетинговые рассылки — всё это зависит от надёжной доставки писем. Хотя Laravel предоставляет мощный слой абстракции для работы с почтой, фактическая доставка всё равно зависит от настроенного транспорта. Использование почтового API вроде Emailit даёт вам высокую доставляемость, отслеживание доставки, управление отказами и подробную аналитику без необходимости управлять SMTP-серверами или беспокоиться о репутации IP-адресов.
В этом руководстве мы пройдём через настройку Emailit в Laravel-приложении и отправку писем как через стандартную почтовую систему Laravel, так и через Facade Emailit.
Требования
- PHP 8.1 или выше
- Laravel 10, 11 или 12
- Аккаунт Emailit с API-ключом
Установка
Установите пакет через Composer:
composer require emailit/emailit-laravel
Пакет автоматически регистрирует свой сервис-провайдер, поэтому ручная регистрация не нужна. Он работает с Laravel 10, 11 и 12 из коробки.
Настройка
Добавьте ваш API-ключ в .env:
EMAILIT_API_KEY=your_api_key
Установите Emailit как почтовик по умолчанию:
MAIL_MAILER=emailit
Добавьте почтовик emailit в массив mailers в config/mail.php:
'mailers' => [
// ...
'emailit' => [
'transport' => 'emailit',
],
],
При желании опубликуйте конфигурационный файл для настройки базового URL API:
php artisan vendor:publish --tag=emailit-config
Конфигурация намеренно минимальна. После установки API-ключа и почтовика по умолчанию Laravel будет автоматически направлять всю исходящую почту через Emailit. Нет необходимости настраивать SMTP-хосты, порты, параметры шифрования или учётные данные аутентификации, как при работе с традиционными почтовыми серверами.
Отправка писем через Laravel Mail
После настройки все почтовые функции Laravel работают из коробки. Ничего в существующем коде менять не нужно.
Использование Mailable
Создайте класс Mailable как обычно:
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 WelcomeEmail extends Mailable
{
use Queueable, SerializesModels;
public function __construct(
public readonly User $user,
) {}
public function envelope(): Envelope
{
return new Envelope(
subject: 'Добро пожаловать в наше приложение',
);
}
public function content(): Content
{
return new Content(
view: 'emails.welcome',
);
}
}
Затем отправьте его:
use Illuminate\Support\Facades\Mail;
use App\Mail\WelcomeEmail;
Mail::to('user@example.com')->send(new WelcomeEmail($user));
Очереди писем, Markdown-письма и уведомления работают именно так, как вы ожидаете. Emailit прозрачно встраивается в почтовый слой Laravel, поэтому вы можете заменить им любой существующий транспорт вроде SMTP, Mailgun или SES без изменения кода приложения. Это упрощает тестирование Emailit наряду с текущим провайдером или постепенную миграцию.
Использование Facade Emailit
Для функций, выходящих за рамки почтовой системы Laravel, таких как шаблоны с переменными, отложенная отправка или управление API-ресурсами, используйте Facade Emailit. Он даёт прямой доступ к полному Emailit PHP SDK.
Отправка письма через API
use Emailit\Laravel\Facades\Emailit;
$email = Emailit::emails()->send([
'from' => 'hello@yourdomain.com',
'to' => ['user@example.com'],
'subject' => 'Привет от Emailit',
'html' => '<h1>Добро пожаловать!</h1>',
]);
echo $email->id;
echo $email->status;
Отправка с шаблоном
Используйте шаблоны, созданные в панели управления Emailit, и передавайте динамические переменные:
use Emailit\Laravel\Facades\Emailit;
$email = Emailit::emails()->send([
'from' => 'hello@yourdomain.com',
'to' => 'user@example.com',
'template' => 'welcome_email',
'variables' => [
'name' => 'Иван Иванов',
'company' => 'ООО "Рога и копыта"',
],
]);
Использование серверных шаблонов — мощный подход для Laravel-приложений. Ваши дизайнеры и маркетологи могут обновлять содержимое, стили и макет писем в панели управления Emailit без изменений кода или новых развёртываний. PHP-код должен только передавать данные, а шаблон обрабатывает рендеринг.
Планирование отправки письма
use Emailit\Laravel\Facades\Emailit;
$email = Emailit::emails()->send([
'from' => 'reminders@yourdomain.com',
'to' => 'user@example.com',
'subject' => 'Напоминание о встрече',
'html' => '<p>Ваша встреча завтра в 14:00.</p>',
'scheduled_at' => '2026-04-10T09:00:00Z',
]);
Запланированные письма полностью обрабатываются API Emailit, что означает их независимость от системы очередей Laravel. Это идеально для напоминаний о встречах, уведомлений о продлении подписки и срочных кампаний, где нужна гарантированная доставка в определённое время, даже если сервер приложения недоступен.
Отправка с вложениями
use Emailit\Laravel\Facades\Emailit;
$email = Emailit::emails()->send([
'from' => 'invoices@yourdomain.com',
'to' => 'customer@example.com',
'subject' => 'Ваш счёт №12345',
'html' => '<p>Счёт во вложении.</p>',
'attachments' => [
[
'filename' => 'invoice.pdf',
'content' => base64_encode(file_get_contents('invoice.pdf')),
'content_type' => 'application/pdf',
],
],
]);
Управление ресурсами
Facade предоставляет доступ ко всем сервисам API Emailit, позволяя управлять всей почтовой инфраструктурой из Laravel.
Домены
use Emailit\Laravel\Facades\Emailit;
$domain = Emailit::domains()->create([
'name' => 'example.com',
'track_loads' => true,
'track_clicks' => true,
]);
$domain = Emailit::domains()->verify('sd_123');
Управление доменами отправки через API полезно для SaaS-платформ, которым нужно настраивать пользовательские домены для каждого клиента. Вы можете автоматизировать весь процесс верификации домена, включая проверку DNS-записей, прямо из Laravel-приложения.
Контакты
use Emailit\Laravel\Facades\Emailit;
$contact = Emailit::contacts()->create([
'email' => 'user@example.com',
'first_name' => 'Иван',
'last_name' => 'Иванов',
]);
$contacts = Emailit::contacts()->list();
Проверка email-адресов
use Emailit\Laravel\Facades\Emailit;
$result = Emailit::emailVerifications()->verify([
'email' => 'test@example.com',
]);
echo $result->status; // valid
echo $result->risk; // low
Проверка email-адресов при регистрации или заполнении форм помогает поддерживать чистый список контактов и защищает репутацию отправителя. Высокий процент отказов от недействительных адресов может привести к попаданию ваших писем в спам, поэтому проверка — лучшая практика для любого Laravel-приложения, отправляющего транзакционные или маркетинговые письма в больших объёмах.
Внедрение зависимостей
Если вы предпочитаете не использовать Facades, можете внедрить клиент напрямую:
use Emailit\EmailitClient;
class EmailController extends Controller
{
public function send(EmailitClient $emailit)
{
$email = $emailit->emails()->send([
'from' => 'hello@yourdomain.com',
'to' => ['user@example.com'],
'subject' => 'Привет',
'html' => '<p>Здравствуйте!</p>',
]);
return response()->json(['id' => $email->id]);
}
}
Сервис-контейнер Laravel автоматически разрешает экземпляр EmailitClient с API-ключом из конфигурации, поэтому вы получаете то же удобство, что и с Facade, плюс преимущества внедрения зависимостей для тестирования.
Обработка ошибок
Базовый PHP SDK выбрасывает типизированные исключения, поэтому вы можете ловить конкретные типы ошибок:
use Emailit\Exceptions\AuthenticationException;
use Emailit\Exceptions\RateLimitException;
use Emailit\Exceptions\ApiErrorException;
use Emailit\Laravel\Facades\Emailit;
try {
Emailit::emails()->send([...]);
} catch (AuthenticationException $e) {
// Неверный API-ключ (401)
} catch (RateLimitException $e) {
// Слишком много запросов (429)
} catch (ApiErrorException $e) {
// Любая другая ошибка API
echo $e->getHttpStatus();
}
В Laravel-приложении вы также можете обрабатывать эти исключения глобально в обработчике исключений или использовать middleware для перехвата ошибок лимита запросов и реализации автоматической логики повторных попыток. Это обеспечивает устойчивость приложения даже при отправке больших объёмов писем.
Все доступные сервисы
Facade даёт доступ ко всему функционалу API Emailit:
| Сервис | Использование | Описание |
|---|---|---|
| Emails | Emailit::emails() | Отправка, список, получение, отмена, повтор писем |
| Domains | Emailit::domains() | Создание, верификация, список, управление доменами отправки |
| API Keys | Emailit::apiKeys() | Создание, список, управление API-ключами |
| Audiences | Emailit::audiences() | Создание, список, управление аудиториями |
| Subscribers | Emailit::subscribers() | Добавление, список, управление подписчиками |
| Templates | Emailit::templates() | Создание, список, публикация шаблонов писем |
| Suppressions | Emailit::suppressions() | Создание, список, управление заблокированными адресами |
| Email Verifications | Emailit::emailVerifications() | Проверка email-адресов |
| Email Verification Lists | Emailit::emailVerificationLists() | Массовая проверка email-адресов |
| Webhooks | Emailit::webhooks() | Создание, список, управление вебхуками |
| Contacts | Emailit::contacts() | Создание, список, управление контактами |
| Events | Emailit::events() | Список и получение событий |
Начало работы
Установите пакет и начните отправлять письма менее чем за минуту:
composer require emailit/emailit-laravel
Ознакомьтесь с полной документацией пакета на GitHub, Emailit PHP SDK для базового клиента или перейдите к справочнику API для подробностей по каждой конечной точке.
Блог
Последние новости и обновления напрямую от Emailit.
Будьте в курсе последних статей из блога Emailit.


