«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Учебное пособие по почтовому использованию Laravel

Учебное пособие по почтовому использованию Laravel

Опубликовано 8 ноября 2024 г.
Просматривать:152

Отправка электронных писем в Laravel требует взаимодействия трех компонентов: почтовой программы Laravel, почтовых классов Laravel и фасада Mail. Каждый из трех касается разных аспектов жизненного цикла отправки электронного письма.

Почтовые программы — это драйверы для подключения служб отправки электронной почты (таких как AWS SES, Sendgrid, Mailgun и т. д.), которые приложение может использовать для пересылки электронных писем получателям.

Laravel Mailable — это специальные классы, которые представляют собой шаблон электронного письма для отправки. Он содержит всю типичную информацию сообщения электронной почты, такую ​​как содержимое, поле «Кому», вложения и т. д.

Наконец, фасад Mail — это точка доступа для запроса фактической отправки почтового сообщения через драйвер почтовой программы.

У меня была возможность детально изучить эту систему, и теперь в часы пик Inspector отправляет более 6000 электронных писем в час.

Laravel Mailable Tutorial

Надеюсь, мой опыт поможет вам лучше понять этот компонент фреймворка, поскольку Laravel Mailable — один из ключевых компонентов любого современного приложения.

Чтобы увидеть больше технических статей, вы можете подписаться на меня в Linkedin или X.

Конфигурации почтовых программ Laravel

Конфигурация драйверов почтовой программы в Laravel находится в файле config/mail.php. Можно определить несколько почтовых программ, каждый из которых характеризуется именем и драйвером транспорта.

'mailgun' => [
    'transport' => 'mailgun',
    // 'client' => [
    //     'timeout' => 5,
    // ]

Laravel попытается использовать их в случае сбоя основной службы электронной почты.

Создайте почтовый класс

Mailable — это класс PHP, который представляет электронное письмо, отправленное вашим приложением. Вы можете создать новый почтовый класс с помощью команды Artisan make.

php artisan make:mail OrderConfirmation

Настройка почтового сообщения осуществляется с помощью трех основных методов: конверта, содержимого и вложений, которые соответственно определяют заголовки, тело сообщения и любые вложения.

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailables\Address;
use Illuminate\Mail\Mailables\Attachment;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;

class OrderConfirmation extends Mailable
{
    use Queueable;
    use SerializesModels;

    public function __construct(public Order $order) {}

    /**
     * Configure the email message
     */
    public function envelope()
    {
        return new Envelope(
            from: new Address('[email protected]', 'E-commerce'),
            subject: 'Order Confirmation',
        );
    }

    /**
     * Generate the body
     */
    public function content()
    {
        return new Content(
            markdown: 'emails.orders.confirm',
        );
    }

    /**
     * Configure the email attachements
     */
    public function attachments()
    {
        $code = $this->order->code;

        return [
            Attachment::fromPath("/path/to/order-{$code}.pdf"),
        ];
    }
}

Отрисовка содержимого электронного письма, очевидно, возлагается на соответствующий шаблон Blade. Внутри представления Blade можно получить данные, которые будут использоваться для рендеринга электронной почты, используя общедоступные свойства, определенные в классе mailable ($order в приведенном выше примере).

Code: {{ $order->code }}
Address: {{ $order->address }}
...

Отправка Laravel Mailable

Фактическая отправка электронного письма происходит через фасад Mail и его методы to и send.

class OrderController extends Controller
{
    public function ship(Order $order)
    {
        // do stuff with the order

        // Send the confirmation email
        Mail::to($order->user)->send(new OrderConfirmation($order));
    }
}

Получатель электронной почты может быть передан в виде строки адреса электронной почты, через объект «Пользователь» или коллекцию объектов, которые имеют свойства имени и электронной почты.

Фактическое электронное письмо, которое должно быть отправлено, представлено объектом mailable, который получает необходимые свойства для отображения шаблона Blade, связанного с содержимым.

Фасад Mail предлагает различные цепочки методов, которые позволяют вам более подробно определить конфигурацию отправки, как в отношении получателей (с помощью методов cc и bcc), так и времени и методов отправки (очередь или позже).

Если вы хотите научиться создавать собственные фасады, вы можете прочитать статью ниже:

https://inspector.dev/how-to-extend-laravel-with-driver-based-services/

Поставить в очередь почтовое сообщение Laravel

Поскольку для отправки электронного письма требуется использование внешних служб (драйверов Mailer), эта операция может выполняться медленно и отрицательно влиять на удобство работы пользователя.

Laravel позволяет ставить сообщения электронной почты в очередь для фоновой отправки. Если вас интересует руководство по использованию системы очередей Laravel в больших масштабах, вы можете прочитать статью ниже:

https://inspector.dev/what-worked-for-me-using-laravel-queues-from-the-basics-to-horizon/

Чтобы отложить отправку электронного письма в фоновом режиме, у вас есть два варианта: интерфейс MustQueue или метод очереди фасада Mail.

Как показано в предыдущем фрагменте, класс mailable генерируется с некоторыми свойствами, прикрепленными по умолчанию, например Queueable.

Это позволяет программно использовать методы очереди на фасаде Mail, не затрагивая вашу реализацию:

Mail::to($user)->queue(new OrderConfirmation($order));

В качестве альтернативы вы можете объявить реализацию интерфейса MustQueue в классе Mailable:

use Illuminate\Contracts\Queue\ShouldQueue;

class OrderConfirmation extends Mailable implements ShouldQueue
{
    ...
}

Если вы используете этот интерфейс, отправка электронного письма всегда ставится в очередь, даже если вы вызываете стандартный метод отправки на фасаде Mail.

// If the mailable class implements ShouldQueue these methods has the same behaviour.
Mail::to($user)->send(new OrderConfirmation($order));
Mail::to($user)->queue(new OrderConfirmation($order));

Рендеринг почтового шаблона Laravel в браузере

Когда вы реализуете представление, связанное с сообщением электронной почты, очень полезно иметь визуальную информацию о том, какой конечный результат отобразит представление Blade. Вы можете сделать это, используя файл маршруты/mailable.php в своих проектах Laravel.

/*
 * Render email in the browser.
 *
 * Visit https://homestead.test/mailable
 */
Route::get('/', function () {
    return new \App\Domains\Organization\Mails\IngestionLimitMail(
        \App\Domains\Organization\Models\Organization::firstOrFail()
    );
});

Вы можете вернуть действительный экземпляр Mailable из маршрута, и Laravel отобразит представление в браузере. Это похоже на разработку обычной веб-страницы.

Laravel Mailable Tutorial

Наконец, не забудьте ограничить доступность этого маршрута в
RouteServiceProvider:

class RouteServiceProvider extends ServiceProvider
{
    /**
     * Define your route model bindings, pattern filters, etc.
     *
     * @return void
     */
    public function boot()
    {
        if (app()->environment('local')) {
            $this->mapMailableRoutes();
        }
    }

    /**
     * Render mailables in the browser.
     *
     * @return void
     */
    protected function mapMailableRoutes()
    {
        Route::prefix('mailable')
            ->group(base_path('routes/mailable.php'));
    }
}

Чтобы увидеть больше технических статей, вы можете подписаться на меня в Linkedin или X.

Контролируйте свое приложение Laravel бесплатно

Инспектор — это инструмент мониторинга выполнения кода, специально разработанный для разработчиков программного обеспечения. Вам не нужно ничего устанавливать на уровне сервера, просто установите пакет Laravel и все готово.

Если вам нужен HTTP-мониторинг, анализ запросов к базе данных и возможность пересылать оповещения и уведомления в предпочитаемую вами среду обмена сообщениями, попробуйте Inspector бесплатно. Зарегистрируйте свой аккаунт.

Или узнайте больше на сайте: https://inspector.dev

Laravel Mailable Tutorial

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/inspector/laravel-mailable-tutorial-59o0?1. Если есть какие-либо нарушения, свяжитесь с [email protected], чтобы удалить их.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3