如何在Laravel 5.6中使用和自定义HTML电子邮件(不是markdown)?

时间:2018-10-19 16:02:08

标签: php laravel laravel-5.6

因此,我试图在Laravel 5.6中发送html电子邮件,并遇到一些有趣的问题。

其中之一是,有关自定义HTML内容甚至使用默认HTML布局的文档都非常糟糕。

https://laravel.com/docs/5.6/mail#writing-mailables

有一个“配置视图”部分,它告诉您只需执行以下操作即可。

return $this->view('emails.orders.shipped');

很酷,我正在这样做。在我的刀片文件中,我只是

Here is a test message.

它发送很好。但是没有任何意义的是,该页面还说您可以运行以下artisan命令来生成默认电子邮件模板。

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

它说:“邮件目录将包含一个html和markdown目录,每个目录都包含各自对每个可用组件的表示。html目录中的组件用于生成电子邮件的HTML版本。”

文档还深入介绍了如何自定义和使用这些降价模板。您只需调用降价刀片文件顶部的@component('mail::message') ...,但我不希望降价。我只想要普通的HTML电子邮件。

@component('mail::message')仅在使用->view()时不起作用。我也不能只执行以下操作。

->markdown()

它告诉我slot是错误日志中的一个未定义变量。

不确定为什么,/ vendor / mail / html /目录中的layout.blade.php文件包含以下内容...

@extends('vendor.mail.html.layout')
Test message

不确定为什么要在电子邮件的html版本中调用<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> <body> <style> @media only screen and (max-width: 600px) { .inner-body { width: 100% !important; } .footer { width: 100% !important; } } @media only screen and (max-width: 500px) { .button { width: 100% !important; } } </style> <table class="wrapper" width="100%" cellpadding="0" cellspacing="0"> <tr> <td align="center"> <table class="content" width="100%" cellpadding="0" cellspacing="0"> {{ $header ?? '' }} <!-- Email Body --> <tr> <td class="body" width="100%" cellpadding="0" cellspacing="0"> <table class="inner-body" align="center" width="570" cellpadding="0" cellspacing="0"> <!-- Body content --> <tr> <td class="content-cell"> {{ Illuminate\Mail\Markdown::parse($slot) }} {{ $subcopy ?? '' }} </td> </tr> </table> </td> </tr> {{ $footer ?? '' }} </table> </td> </tr> </table> </body> </html>

如何在html电子邮件中扩展此视图?希望至少获得默认的html模板,而不必构建自己的HTML模板...

1 个答案:

答案 0 :(得分:0)

需要HTML时,您正在研究Markdown组件。不要被生成的html目录所欺骗,因为它是降价电子邮件的HTML表示形式。

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

此命令仅用于将标准Markdown组件发布到您的应用程序,因此您可以自定义如何渲染Mardown电子邮件(以HTML和纯文本格式)。您需要HTML电子邮件,而不是markdown,因此运行对您来说毫无用处。

它在电子邮件的html版本中调用Markdown::parse($slot),因为这是将Mardown解析为HTML来发送降价电子邮件的HTML版本的方法。您正在查看Markdown组件。

我使用HTML电子邮件,实际上这很容易。

只需创建一个您应该使用的邮件(php artisan make:mail OrderShipped)。 只需使用return $this->view('your.email.layout');方法中的build()

your.email.layout中,就像使用普通刀片模板一样执行@extend('your.email.master.layout')。使用@section('content')或您给它命名的任何名称并设计刀片模板。

如果您遇到任何困难,请告诉我。