我正在使用默认的notification system(Laravel 5.3)来发送电子邮件。我想在邮件中添加HTML标记。这不起作用(它以纯文本显示strong标记):
public function toMail($notifiable)
{
return (new MailMessage)
->subject('Info')
->line("Hello <strong>World</strong>")
->action('Voir le reporting', config('app.url'));
}
我知道这是正常的,因为在邮件通知模板中,文本显示在{{ $text }}
中。我尝试使用与csrf_field()
助手中相同的系统:
->line( new \Illuminate\Support\HtmlString('Hello <strong>World</strong>') )
但它不起作用:它显示为纯文本。
是否可以在不更改视图的情况下发送HTML标记?(我不想更改视图:其他情况下,保护文本是可以的)。希望它足够清楚,如果不够,对不起。
5条答案
按热度按时间u59ebvdq1#
截至2022年11月,
HtmlString
类运行得非常好。我已经在Laravel 7、8和9上做过了。试试这个,应该能用
请确保在顶部导入
qc6wkl3g2#
运行
php artisan vendor:publish
命令,将email.blade.php
从vendor
目录复制到resources/views/vendor/notifications
。打开此视图,在两个位置将
{{ $line }}
更改为{!! $line !!}
。在Laravel 5.3中,这些是视图中的101
和137
线。这将显示未转义的
line
字符串,允许您在通知电子邮件中使用HTML标记。6rqinv9w3#
您也可以创建一个新的MailClass来扩展
MailMessage
类。例如,可以在
app\Notifications
中创建此类然后在通知中使用:
而应:
将其更改为:
然后你可以在你的通知视图中使用
content
var。例如,如果你发布了通知视图(php artisan vendor:publish
),你可以在resources/views/vendor/notifications
中编辑email.blade.php
,并附加以下内容:我们这样做,工作起来像一个魅力:D
mm9b1k5b4#
如果只想向模板添加一些基本样式,可以在
line()
方法中使用Markdown,而不必修改任何其他代码。8wtpewkr5#
对于任何像我一样采用@eric-lagarda方法的人来说,请记住不要像在视图中那样在自定义
email.blade.php
视图中对内容进行Tab键操作,因为它会被Laravel的markdown解析器解释为代码,将整个content
HTML Package 在<code>
HTML标签中。这让我很头疼,但多亏了this的回答,我设法弄清楚了问题所在。因此,要附加到email.blade.php
视图中的代码将如下所示(请注意大括号前缺少空格/表格):