Laravel 生成的电子邮件未正确格式化 HTML

问题描述 投票:0回答:4

我正在努力解决 Laravel 的电子邮件格式问题。 我从数据库获取电子邮件内容(HTML),这并不重要,但随后添加了引号,格式错误,我的电子邮件如下所示:

t formatting my email corres

这是我的代码,非常感谢您的帮助!

我尝试过 '内容' => 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'));
    }
}
html laravel email laravel-5 html-email
4个回答
4
投票

我尝试了一些方法来修复我的电子邮件显示不正确的问题。最后清除我的视图缓存解决了我的问题,我没有看到其他人建议。这很可能不是您的问题,但我会将其包含在我的答案中,希望能帮助其他人解决我的问题。

发布 Laravel 电子邮件视图

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

确保 html 视图中没有缩进

resources/views/vendor/mail/html

确保转义通过变量插入的任何 html

{!! $content !!}

清除缓存视图

php artisan view:clear

1
投票

根据 Laravel 文档:

默认情况下,Blade {{ }} 语句会自动通过 PHP的htmlspecialchars函数可以防止XSS攻击。如果你不这样做 想要转义你的数据,你可以使用以下语法:

Hello, {!! $name !!}.

参考:

Laravel -> 刀片模板 -> 显示未转义的数据


1
投票

在您的 emails.blabla 中查看我们的类似信息,它将转义 HTML 元素

{{{ $content }}}

或尝试

{!! $content !!}


0
投票

迟到总比不到好: 我只是偶然发现了这个问题,而我的案例的重点是我正在使用 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
© www.soinside.com 2019 - 2024. All rights reserved.