web-dev-qa-db-ja.com

Laravel 5 HTMLをメールに追加

現在、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としてレンダリングされるようにするにはどうすればよいですか?

20
Devos50

最初のパラメーターでhtmlキーを指定する必要があります。

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

また、自動エスケープされたブロックを置き換えます{{ }}エスケープされていない{!! !!}テンプレート内:

<p> {!! $text !!} </p>
28
Limon Monte

以下を使用する必要があります。

{!! $text !!}

の代わりに

{{ $text }}

Bladeは、明示的に指示しない限り、エコーするときにすべてのhtmlを自動的にエスケープします。

15
Igor Pantović

ええ、上記のソリューションはうまく機能します。

使用する {!! $contents !!}

これの代わりに

{{ $contents }}

この {!! $contents !!}はhtmlを許可するためのものですが、この{{ $contents }}はプレーンテキスト用です。

2
Delino

さまざまなソリューションを確認した後、次のコードが私のために働いた-

 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
Sachin Vairagi