現在、Laravel 5でHTMLメールを作成しようとしていますが、いくつかのテキスト(<br/>
elements)メールに挿入したい。次のコードを使用してメールを送信します。
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('[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.']);
}