Статьи по Laravel

Создание и отправка email в Laravel с использованием Markdown

Узнайте, как отправлять электронные письма с помощью markdown. Благодаря этой новой возможности в Laravel 5.4 вам больше не нужно беспокоиться о написании HTML и встроенных стилей CSS.

Лучший способ создания email.

Начиная с версии Laravel 5.4 мы можем писать письма, используя Markdown, но не только это.

Мы можем повторно использовать компоненты между письмами, которые мы отправляем, используя Blade.

В этом посте мы рассмотрим, как создать письмо, подобное следующему, в 3 простых шага:

Шаги, которые необходимо выполнить

  • Первое, что мы сделаем, это создадим класс, который наследуется от Mailable. Этот класс будет управлять отправкой почты.
  • Затем мы создадим представление, используя Markdown, с содержимым письма, которое мы собираемся отправить.
  • Наконец, мы используем наш класс, наше представление и отправим письмо.

Почта

Почему нужно создать класс?

Согласно документации:

В Laravel каждый тип письма, которое мы отправляем из нашего приложения, представлен классом Mailable.

Эти уроки будут проходить в app\Mail.

И при этом нам не нужно беспокоиться о создании ни этой папки, ни класса, потому что это сделает за нас команда:

php artisan make:mail OrderShipped --markdown=emails.orders.shipped

Примечание: Приведенная выше команда создает класс OrderShipped и файл shipped.blade.php в resources/views/emails/orders

Этот пример приведен в документации Laravel. Мы должны адаптировать его в соответствии с нашей задачей.

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

php artisan make:mail EmailConfirmation --markdown=emails.users.confirmation

В результате мы создали наш класс и наше представление.

Шаблон с использованием Markdown

Наше представление, созданное с помощью этой команды, уже имеет содержимое по умолчанию, которое использует Markdown:

@component('mail::message') # Introduction The body of your message. @component('mail::button', ['url' => '']) Button Text @endcomponent Thanks,<br> {{ config('app.name') }} @endcomponent
Code language: PHP (php)

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

Настройка компонентов

Мы можем создавать свои собственные компоненты.

Или получить компоненты по умолчанию, чтобы редактировать их по своему усмотрению.

Чтобы получить доступ к этим стилям и изменить их, мы должны использовать следующую команду:

php artisan vendor:publish --tag=laravel-mail

Эта команда:

  • Извлекает компоненты в resources/views/vendor/mail. В 2 папки: html и markdown.
  • Создает папку resources/views/vendor/mail/html/themes с файлом default.css, содержащим тему по умолчанию для наших писем.

Если мы хотим, мы можем определить новую тему, создав новый CSS-файл в папке themes. В то время как тема, которая будет использоваться, указывается в config/mail.php.

Примечание: Создание этих файлов не означает, что мы должны перезаписать все компоненты. Также нам не нужно вносить изменения в сгенерированные файлы.

В качестве примера я перезаписал только компонент сообщения.

@component('mail::layout') {{-- Header --}} @slot('header') @component('mail::header', ['url' => config('app.url')]) {{ config('app.name') }} @endcomponent @endslot ![Логотип$slot }} {{-- Footer --}} @slot('footer') @component('mail::footer') © {{ date('Y') }} {{ config('app.name') }}. Все'/configuracion') }} @endcomponent @endslot [logo]: https://mysite.eu/images/mago/mago-200x200.png @endcomponent
Code language: PHP (php)

Я поместил этот компонент сообщения в resources/views/emails.

Таким образом, resources/views/emails/users/confirmation.blade.php выглядит следующим образом:

@component('emails.message') # Приветственное письмо Здравствуйтетвуйтейте$user->name }}, добро'mail::button', [ 'url' => $emailConfirmationUrl ]) Нажмите
Code language: PHP (php)

Примечание: Я могу использовать $emailConfirmationUrl, поскольку он также определен в классе EmailConfirmation как публичный атрибут. Другой альтернативой является использование функции with для введения переменных в представление.

Отправка почты

Команда создала для нас класс и представление.

После редактирования представления в соответствии с нашей задачей, следующее, что нужно сделать, это “отправить письмо”.

Как это сделать?

Mail::to($user)->send(new EmailConfirmation($user));
Code language: PHP (php)

Эта фраза говорит сама за себя:

Отправляет письмо типа EmailConfirmation пользователю $user.

Почему мы передаем параметр новому экземпляру EmailConfirmation?

Это нужно для того, чтобы мы могли использовать данные пользователя в представлении.

И сейчас мы на это посмотрим.

Использование переменных в представлении почты

В этом случае класс EmailConfirmation получает объект $user. Но наш Mailable может принимать данные любого типа.

В этом случае наш класс адаптируется следующим образом:

class EmailConfirmation extends Mailable { use Queueable, SerializesModels; public $user; public function __construct(User $user) { $this->user = $user; } public function build() { return $this->markdown('emails.users.confirmation'); } }
Code language: PHP (php)

До и после

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

Давайте быстро рассмотрим сравнение.

Вот как я отправлял сообщение с подтверждением раньше:

Mail::send('emails.users.confirmation', $data, function($message) use ($data) { $message->to($data['email'], $data['name'])->subject('Пожалуйста, подтвердите свою электронную почту'); });
Code language: PHP (php)

А вот как выглядит код с использованием Mailables:

Mail::to($user)->send(new EmailConfirmation($user));
Code language: PHP (php)

Что мы упустили?

Правильно. Тему письма.

Мы должны поместить эти данные в метод build метода EmailConfirmation:

public function build() { return $this->markdown('emails.users.confirmation')->subject('Пожалуйста, подтвердите свою электронную почту'); }
Code language: PHP (php)

Этот метод должен “собрать наше письмо”, указывая представление, которое мы будем использовать.

В дополнение к указанию темы мы также можем прикреплять файлы к нашему письму.

Заключение

Нам больше не нужно бороться с CSS.

Мы можем использовать Markdown вместо HTML.

Мы можем использовать (и создавать свои собственные) компоненты.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *