Laravel 5 将 HTML 添加到电子邮件
Laravel 5 adding HTML to email
我目前正在尝试在 Laravel 5 中创建一个 HTML 电子邮件,我有一些文本(包含 <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 而不是纯文本?
您需要在第一个参数中指定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('test@yourdamin.com') //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.']);
}
如果您使用 ShouldQueue 发送电子邮件,您应该再次 运行 命令 'php artisan queue:work',然后再次 运行 您的应用程序。之后查看收件人邮箱,可以看到邮件内容以html格式显示。
我目前正在尝试在 Laravel 5 中创建一个 HTML 电子邮件,我有一些文本(包含 <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 而不是纯文本?
您需要在第一个参数中指定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('test@yourdamin.com') //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.']);
}
如果您使用 ShouldQueue 发送电子邮件,您应该再次 运行 命令 'php artisan queue:work',然后再次 运行 您的应用程序。之后查看收件人邮箱,可以看到邮件内容以html格式显示。