web-dev-qa-db-fra.com

Laravel 5 ajout de HTML à un email

J'essaie actuellement de créer un courrier électronique HTML dans Laravel 5 et j'ai du texte (qui contient des éléments <br/>) que je souhaite insérer dans le courrier électronique. J'utilise le code suivant pour envoyer l'e-mail:

Mail::send(array('html' => 'emails.newinvoice'), array('text' => $emailtext), function($message) use ($email, $subject, $contact_company)
{
    $message->to($email, $contact_company)->subject($subject);
});

Donc, la variable $emailtext contient du texte avec des balises HTML. Dans ma vue de présentation emails.newinvoice, j'ai les éléments suivants:

<!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>

Lors de l'envoi du courrier électronique, le texte inséré dans mon courrier et les éléments HTML de ce texte sont affichés sous forme de caractères normaux, ce qui signifie que mon courrier électronique s'affiche de la manière suivante:

test<br/>test

Au lieu de

test
test

Comment puis-je m'assurer que les balises HTML du texte inséré sont rendues au format HTML et non au format texte?

20
Devos50

Vous devez spécifier la clé html dans le premier paramètre:

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

Remplacez également le bloc {{ }} à échappement automatique par le {!! !!} non échappé du modèle:

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

Vous devez utiliser:

{!! $text !!}

au lieu de

{{ $text }}

Blade échappe automatiquement à tout code HTML lors de l'écho, à moins que vous ne le lui disiez explicitement.

15
Igor Pantović

Oui, la solution ci-dessus fonctionne très bien ..

utiliser {!! $contents !!}

au lieu de cela

{{ $contents }}

Ce {!! $contents !!} sert à autoriser le code HTML Alors que ce {{ $contents }} concerne uniquement le texte brut.

2
Delino

Après avoir vérifié diverses solutions, les codes suivants ont fonctionné pour moi - 

 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