電子メールで通知を送信するときに使用されるHTML電子メールレイアウトをカスタマイズしようとしています。
メールビューと通知ビューの両方を公開しました。
_php artisan vendor:publish --tag=laravel-mail
_
_php artisan vendor:publish --tag=laravel-notifications
_
_/resources/views/vendor/notifications/email.blade.php
_ファイルを変更した場合、送信されるメールのBODYコンテンツのみを変更できます。フッター、ヘッダー、および電子メールレイアウトの他のすべての部分も変更することを検討しています。
_/resources/vendor/mail/html/
_内のビューも変更しようとしましたが、通知が送信されるたびに、これらのビューさえ使用せず、代わりにデフォルトのlaravelフレームワークのものを使用します。
Notificationクラスによって返されるMailMessage
にビューを設定できることは承知していますが、標準のline()
、greeting()
などの関数を保持したいです。
_/resources/vendor/mail/html
_のビューを使用して電子メールを送信する通知を取得する方法を知っている人はいますか?
以下は私の_/resources/views/vendor/notifications/email.blade.php
_ファイルですが、ヘッダー/フッター/全体的なレイアウトをカスタマイズする場所がありません。
_@component('mail::message')
{{-- Greeting --}}
@if (! empty($greeting))
# {{ $greeting }}
@else
@if ($level == 'error')
# Whoops!
@else
# Hello!
@endif
@endif
{{-- Intro Lines --}}
@foreach ($introLines as $line)
{{ $line }}
@endforeach
{{-- Action Button --}}
@if (isset($actionText))
<?php
switch ($level) {
case 'success':
$color = 'green';
break;
case 'error':
$color = 'red';
break;
default:
$color = 'blue';
}
?>
@component('mail::button', ['url' => $actionUrl, 'color' => $color])
{{ $actionText }}
@endcomponent
@endif
{{-- Outro Lines --}}
@foreach ($outroLines as $line)
{{ $line }}
@endforeach
<!-- Salutation -->
@if (! empty($salutation))
{{ $salutation }}
@else
Regards,<br>{{ config('app.name') }}
@endif
<!-- Subcopy -->
@if (isset($actionText))
@component('mail::subcopy')
If you’re having trouble clicking the "{{ $actionText }}" button, copy and paste the URL below
into your web browser: [{{ $actionUrl }}]({{ $actionUrl }})
@endcomponent
@endif
@endcomponent
_
このコマンドを実行する
php artisan vendor:publish --tag=laravel-notifications
php artisan vendor:publish --tag=laravel-mail
laravel 5.7+の更新
php artisan vendor:publish
そして、あなたは得るでしょう:
[<number>] Tag: laravel-mail
[<number>] Tag: laravel-notifications
次に、その番号を前に入力して、編集用にファイルを公開します
そしてその後
/resources/views/vendor/mail/html/
すべてのコンポーネントを編集し、必要なものをカスタマイズできます。たとえば、「All rights reserved」という文を編集しました。このファイル内のその画像の下部にある「すべてのテスト予約済み」に:
/resources/views/vendor/mail/html/message.blade.php
これは私が得たものです:
Config/mail.phpに正しい設定があることを確認してください:
'markdown' => [
'theme' => 'default',
'paths' => [
resource_path('views/vendor/mail'),
]
],
通知を作成し、ヘッダーとフッターを含むテンプレートを変更する方法に関する記事を書きました。
Laravelコンポーネントがどのように機能するか、データを新しいメールテンプレートに渡す方法についての説明が含まれています。
最も重要な部分は、電子メールテンプレート内に次のコードを配置することです。
@component('mail::layout')
{{-- Header --}}
@slot('header')
@component('mail::header', ['url' => config('app.url')])
Header Title
@endcomponent
@endslot
{{-- Body --}}
This is our main message {{ $user }}
{{-- Subcopy --}}
@isset($subcopy)
@slot('subcopy')
@component('mail::subcopy')
{{ $subcopy }}
@endcomponent
@endslot
@endisset
{{-- Footer --}}
@slot('footer')
@component('mail::footer')
© {{ date('Y') }} {{ config('app.name') }}. Super FOOTER!
@endcomponent
@endslot
@endcomponent
コンポーネントがどのように機能し、データを適切に渡す方法に関する詳細が必要な場合は、中記事を確認できます。
@Brianテンプレートファイルの@componentディレクティブを変更するだけで、カスタムテンプレートを使用できます。例えば:
テンプレートが_/resources/views/vendor/mail/html/message.blade.php
_にあると仮定して、@component('mail::message')
を@component('vendor.mail.html.message')
に置き換えます。
組み込みのLaravelのものを動作させるのではなく、カスタムビューを使用することになりました。
Notificationクラスに次のuse
ステートメントを追加しました
use Illuminate\Support\Facades\View;
use Illuminate\Support\HtmlString;
use TijsVerkoyen\CssToInlineStyles\CssToInlineStyles;
次に、toMail
メソッドで:
public function toMail($notifiable)
{
$view_file = 'emails.teamInvitation';
$view = View::make($view_file, ['sender' => $this->sender, 'invitationToken' => $this->invitationToken, 'team' => $this->team ]);
$view = new HtmlString(with(new CssToInlineStyles)->convert($view));
return (new MailMessage)
->subject('PreSource Invitation From ' . $this->sender->name )
->view('emails.htmlBlank', ['bodyContent' => $view]);
}
emails.teamInvitation
は私の実際のメールテンプレートです。
ビューを文字列にコンパイルし、スタイルシートをインラインに変換します。
emails.htmlBlank
はビューファイルですが、それはエコーアウトbodyContent
です。 MailMessage->view
メソッドは、HtmlStringではなくビューファイルを想定しています。
ここで提案されていることをしないでください。
これは動作します。もちろん、「vendor/mail/markdown」フォルダの内容ではなく「vendor/mail/html」フォルダに含まれるテンプレートを編集する必要があることを覚えておいてください。もちろん、line()/ greeting( )メール作成機能
代わりに、artisanコマンドを実行してから、リソースフォルダー内の生成されたファイルを編集します。ベンダーファイルを上書きしないでください。ローカルバージョンで作業している場合は、ライブサーバーにプッシュしてcomposer installを実行すると、これらの変更はもうありません。
Laravelの継承により、事前に定義されたメソッドとファイルを簡単に上書きできるため、それを利用して、よりクリーンなバージョン管理と、コア機能への変更をロールバックする能力を高めます。
コンポーネント@component('mail::message')
に基づいてメールを作成しています。これはデフォルトであり、ドキュメントに記載されているもののみです。このコンポーネントでは、ヘッダーを変更できません。ただし、そのファイルを調べると、
_\vendor\laravel\framework\src\Illuminate\Mail\resources\views\markdown\message.blade.php
_
別のコンポーネント@component('mail::layout')
を使用していることがわかります。
_message.blade.php
_ファイルの内容を_.blade.php
_にコピーし、_{{ $slot }}
_を以前にファイルにあったものに置き換えます。
そして今、あなたはあなたのファイルにすべての柔軟性を持っています。
プラス
スタイルを変更する場合は、ファイル_\config\mail.php
_に移動します
markdown
セクションを次のように変更します
_'markdown' => [
'theme' => 'default0',
'paths' => [
resource_path('views/vendor/mail'),
base_path('resources/views/emails/vendor'),
],
],
_
この場合、デフォルトのテーマを自分の_\resources\views\emails\vendor\html\themes\default0.css
_に置き換えました
または、パスのカスタマイズが必要ない場合は、_default0.css
_を_/resources/views/vendor/mail/html/themes
_に入れます。これはデフォルトのパスであり、言及する必要はありません。
テスト済みLaravel 5.7