Laravel 5 将 HTML 添加到电子邮件

Laravel 5 adding HTML to email

我目前正在尝试在 Laravel 5 中创建一个 HTML 电子邮件,我有一些文本(包含 <br/> 元素)我想插入到电子邮件中。我使用以下代码发送电子邮件:

Mail::send(array('html' => 'emails.newinvoice'), array('text' => $emailtext), function($message) use ($email, $subject, $contact_company)
{
    $message->to($email, $contact_company)->subject($subject);
});

所以 $emailtext 变量包含一些带有 HTML 标签的文本。在我的 emails.newinvoice 布局视图中,我有以下内容:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
    <head></head>
    <body>
        <p>{{{ $text }}}</p>
    </body>
</html>

发送电子邮件时,我邮件中插入的文本和该文本中的 HTML 元素显示为普通字符,这意味着我的电子邮件显示如下:

test<br/>test

而不是

test
test

如何确保插入文本中的 HTML 标签呈现为 HTML 而不是纯文本?

您需要在第一个参数中指定html键:

Mail::send( ['html' => 'emails.newinvoice'], ['text' => $emailtext], 
//           ^^^^

同时将模板中的自动转义块 {{ }} 替换为未转义的 {!! !!}

<p> {!! $text !!} </p>

您需要使用:

{!! $text !!}

而不是

{{ $text }}

Blade 在回显时会自动转义任何 html,除非您明确告诉它不要转义。

是的,上面的解决方案工作得很好..

使用{!! $contents !!}

而不是这个

{{ $contents }}

这个{!! $contents !!}是为了让html 虽然此 {{ $contents }} 仅适用于纯文本。

检查各种解决方案后,以下代码对我有用 -

 try {
      $template_data = ['otp' => $otp, 'name' => $name];
      //send verification code
      Mail::send(['html' => 'email.account_verification'], $template_data,
                function ($message) use ($email) {
                   $message->to($email)
                   ->from('test@yourdamin.com') //not sure why I have to add this
                   ->subject('Account verification');
      });

      return Response::json(['code' => 200, 'msg' => 'Sent successfully']);

      } catch (Exception $ex) {
            return Response::json(['code' => 200, 'msg' => 'Something went wrong, please try later.']);
      }  

如果您使用 ShouldQueue 发送电子邮件,您应该再次 运行 命令 'php artisan queue:work',然后再次 运行 您的应用程序。之后查看收件人邮箱,可以看到邮件内容以html格式显示。