我正在努力解决 Laravel 的电子邮件格式问题。 我从数据库获取电子邮件内容(HTML),这并不重要,但随后添加了引号,格式错误,我的电子邮件如下所示:
这是我的代码,非常感谢您的帮助!
我尝试过 '内容' => htmlspecialchars($内容) 和 '内容' => htmlentities($content) 但没有任何效果,对于刀片文件:
<div>
{{!!$content!!}}
</div>
给我一个错误。我也试过了
<div>
{{{$content}}}
</div>
(也是意外字符的错误)和
<div>
{{$content}}
</div>
(这是原来的)
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Cookie;
class InsuranceEmail extends Mailable
{
use Queueable, SerializesModels;
protected $attacheddoc;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct($attacheddoc)
{
$this->attacheddoc=$attacheddoc;
}
/**
* Build the message.rubr
*
* @return $this
*/
public function build()
{
$name = Auth::user()->nom . " " . Auth::user()->prenom;
$sqlContent="SELECT texte from blabla";
$content = DB::connection('blabla')->select( DB::connection('blabla')->raw($sqlContent))[0]->texte;
$content = str_replace('#memberName#', $name, $content);
$content = str_replace('"', '', $content); //I tried this, without any hope ;)
return $this->from('[email protected]')
->markdown('emails.blabla')->with([
'title' => "Email onject",
'memberName' => $name,
'content' => $content,
])
->attach($this->attacheddoc, array(
'as' => 'attacheddoc.pdf',
'mime' => 'application/pdf'));
}
}
我尝试了一些方法来修复我的电子邮件显示不正确的问题。最后清除我的视图缓存解决了我的问题,我没有看到其他人建议。这很可能不是您的问题,但我会将其包含在我的答案中,希望能帮助其他人解决我的问题。
发布 Laravel 电子邮件视图
php artisan vendor:publish --tag=laravel-mail
确保 html 视图中没有缩进
resources/views/vendor/mail/html
确保转义通过变量插入的任何 html
{!! $content !!}
清除缓存视图
php artisan view:clear
根据 Laravel 文档:
默认情况下,Blade {{ }} 语句会自动通过 PHP的htmlspecialchars函数可以防止XSS攻击。如果你不这样做 想要转义你的数据,你可以使用以下语法:
Hello, {!! $name !!}.
参考:
在您的 emails.blabla 中查看我们的类似信息,它将转义 HTML 元素
{{{ $content }}}
或尝试
{!! $content !!}
迟到总比不到好: 我只是偶然发现了这个问题,而我的案例的重点是我正在使用 markdown。
->markdown('emails.blabla')->with(
如 Laravel 文档中所述:
撰写 Markdown 电子邮件时不要使用过多的缩进。每 Markdown 标准,Markdown 解析器会将缩进的内容呈现为 代码块。
事实上,在我的例子(laravel 11)中,不仅缩进会被解释为代码块,从而显示 html 代码本身,而且 html 块之间也会出现换行符,以便更好地阅读。 理想情况下,markdown 将 html 解释为 html 而不是代码,没有空行,也没有超过一级的缩进。
@component('mail::message')
<h2>Hello {{$body['name']}},</h2>
<p>Cron {{$body['cronname']}} was successfully executed</p>
<div>
@foreach ($body['alerts'] as $alerts)
<div>
@foreach ($alerts as $alert)
@foreach ($alert as $al)
<p>{!! $al !!}</p>
@endforeach
@endforeach
</div>
@endforeach
</div>
<h3>next section</h3>
...
@endcomponent