【问题标题】:Laravel 5 adding HTML to emailLaravel 5 将 HTML 添加到电子邮件
【发布时间】:2015-07-05 15:28:34
【问题描述】:

我目前正在尝试在 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 而不是纯文本?

【问题讨论】:

  • 当你使用 {!! $text !!}?

标签: php html email laravel newline


【解决方案1】:

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

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

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

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

【讨论】:

  • 不幸的是,我插入的 HTML 在此更改后仍然呈现为纯文本。
  • 谢谢 还将自动转义的块 {{ }} 替换为未转义的 {!! !!} 在模板中:这对我有帮助
【解决方案2】:

你需要使用:

{!! $text !!}

而不是

{{ $text }}

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

【讨论】:

    【解决方案3】:

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

    使用{!! $contents !!}

    而不是这个

    {{ $contents }}
    

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

    【讨论】:

      【解决方案4】:

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

       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.']);
            }  
      

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-06-10
          • 2012-06-23
          • 2019-04-16
          • 1970-01-01
          • 2019-11-20
          • 2014-04-24
          • 1970-01-01
          相关资源
          最近更新 更多