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, а не как обычный текст?
4 answers
Вам нужно указать html
ключ в первом параметре:
Mail::send( ['html' => 'emails.newinvoice'], ['text' => $emailtext],
// ^^^^
Также замените автоматически экранированный блок {{ }}
на неэкранированный {!! !!}
в шаблоне:
<p> {!! $text !!} </p>
Вам нужно использовать:
{!! $text !!}
Вместо
{{ $text }}
Лезвие автоматически экранирует любой 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('[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.']);
}