我正在尝试自定义通过电子邮件发送通知时使用的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框架。
我知道我可以在我的通知类返回的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
答案 0 :(得分:32)
运行此命令
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/
您可以编辑所有组件并自定义所需内容。 例如,我编辑了句子&#34;保留所有权利&#34;。到&#34;所有测试保留&#34;在该文件中该图像的底部:
/resources/views/vendor/mail/html/message.blade.php
这就是我得到的:
答案 1 :(得分:11)
确保在config / mail.php中具有正确的配置:
'markdown' => [
'theme' => 'default',
'paths' => [
resource_path('views/vendor/mail'),
]
],
答案 2 :(得分:7)
我写了一篇关于如何创建通知和修改模板的文章,包括页眉和页脚。
它包含有关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
如果您想了解有关组件如何工作以及如何正确传递数据的更多详细信息,您可以查看中篇文章。
答案 3 :(得分:4)
@布赖恩 您只需更改模板文件中的@component指令即可使用自定义模板。例如:
将@component('mail::message')
替换为@component('vendor.mail.html.message')
,假设您的模板位于/resources/views/vendor/mail/html/message.blade.php
答案 4 :(得分:3)
我最终只是使用自定义视图,而不是试图使内置的Laravel工作。
我将以下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。
答案 5 :(得分:0)
您正在基于组件@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上测试
答案 6 :(得分:0)
请勿执行此处建议的操作。
这有效。请记住,您应该编辑“ vendor / mail / html”文件夹中包含的模板,而不要编辑“ vendor / mail / markdown”文件夹中的内容,除非您当然使用markdown而不是line()/ greeting( )电子邮件构建功能
相反,运行artisan命令,然后在最终的资源文件夹中编辑生成的文件。永远不要覆盖供应商文件,就好像您使用的是本地版本一样,然后将其推送到活动服务器并运行composer install,您将不再有这些更改。
Laravel的继承使您可以轻松覆盖预定义的方法和文件,因此可以利用它来进行更清晰的版本控制和更好的将更改回滚到核心功能的能力。
答案 7 :(得分:0)
Laravel 5.8
我在文件-> vendor / laravel / framework / src / Illuminate / Mail / resources / views / html / layout.blade.php中找到了电子邮件布局。
就像我不使用markdown发送电子邮件一样,我需要laravel的默认布局(是的,因为我想要:))。
我做了什么?我为我发送了一封重设密码的电子邮件,保存了类似html的电子邮件,然后将html复制到了我的编辑器,并准备更改\ o /。