Laravel 5 добавление HTML в электронную почту


В настоящее время я пытаюсь создать электронное письмо в формате HTML в Laravel 5, и у меня есть текст (который содержит элементы <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, а не как обычный текст?

Author: Devos50, 2015-04-27

4 answers

Вам нужно указать html ключ в первом параметре:

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

Также замените автоматически экранированный блок {{ }} на неэкранированный {!! !!} в шаблоне:

<p> {!! $text !!} </p>
 24
Author: Limon Monte, 2017-11-28 17:21:53

Вам нужно использовать:

{!! $text !!}

Вместо

{{ $text }}

Лезвие автоматически экранирует любой html-код при повторении, если вы явно не скажете ему этого не делать.

 14
Author: Igor Pantović, 2015-04-27 09:12:06

Да, решение выше работает просто отлично..

Использовать {!! $contents !!}

Вместо этого

{{ $contents }}

Это {!! $contents !!} предназначено для разрешения html Хотя это {{ $contents }} только для обычного текста.

 2
Author: delino, 2018-03-20 15:34:23

После проверки различных решений для меня сработали следующие коды -

 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('[email protected]') //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.']);
      }  
 0
Author: Sachin Vairagi, 2018-08-02 11:06:43