使用 Laravel 5.4 发送电子邮件
Working send emails with Laravel 5.4
我正在使用 Laravel 发送电子邮件。
我正在尝试发送一封包含消息的电子邮件并保存在数据库中。
但这种情况发生了:
- 电子邮件已发送到正确的地址,但邮件未发送。
如何在邮件视图中显示消息?
这是我发送电子邮件并将记录保存在数据库中的功能:
public function SendEmailGift(AudiobookSendRequest $request, $id) {
$email = $request->addressee;
$message = $request->message;
if (Auth::user()) {
$audioGift = AudioBook::findOrFail($id);
$userCheck = Auth::user()->$id;
$send = AudiobookSend::where(['user_id' => $userCheck, 'audiobooks_id' => $id])->first();
if(empty($send->user_id)) {
$user_id = Auth::user()->id;
$audiobooks_id = $id;
$send = new AudiobookSend;
$send->user_id = $user_id;
$send->audiobooks_id = $audiobooks_id;
$send->name = $request->name;
$send->addressee = $request->addressee;
$send->message = $request->message;
$send->save();
}
Mail::send('emails.send',
array(
'name' => $request->get('name'),
'addressee' => $request->get('addressee'),
'message' => $request->get('message'),
'location' => $id
), function($message) use ($request)
{
$message->from('no-reply@bdc.com.co');
$message->to($request->addressee, $request->name)->subject('Te han regalado un Audiolibro.');
});
return back()->with('info', 'Se ha enviado el regalo exitosamente');
} else {
return redirect()->route('login')->with('validate', 'Por favor inicia sesión para regalar este audiolibro');
}
}
这里是邮件视图:
<h1 class="page-header">Biblioteca Digital CONFA.</h1>
</br>
<p class="text-justify font-bold">
{{-- $message -> Debe de mostrar el mensaje, tira error, htmlspecialchars() parece venir vacio desde la función. --}}
{{-- <strong>{!! $message !!}</strong> --}}
<strong>Mensaje</strong>
</p>
Para ver el audiolibro, presiona el siguiente boton.
<a href="{{ route('audiobooks.show', $location) }}" class="btn btn-outline-warning">Presioname</a>
一切正常,除了在电子邮件中显示消息。 请帮帮我 =(
您需要在一个变量中渲染视图,然后需要设置消息正文。 例如:
$view = view('yourfilename')->with('message',$message)->render();
Mail::send('emails.send', array( 'name' => $request->get('name'),
'addressee' => $request->get('addressee'),
'message' => $request->get('message'),
'location' => $id
), function($message) use ($request, $view)
{
$message->from('no-reply@bdc.com.co');
$message->to($request->addressee, $request->name)
->subject('Te han regalado un Audiolibro.')
->setBody($view,'text/html');
});
return back()->with('info', 'Se ha enviado el regalo exitosamente');
在您看来,您的留言被注释掉了:
{{-- $message -> Debe de mostrar el mensaje, tira error, htmlspecialchars() parece venir vacio desde la función. --}}
{{-- <strong>{!! $message !!}</strong> --}}
{{--
表示里面的代码不会出现在渲染的HTML里面!因此,您不会在电子邮件中看到任何 $message
。
您遇到了可变碰撞。首先,您将 $message
设置为来自您的用户的一些内容:
'message' => $request->get('message'),
但是随后您在发送方法中使用 $message
来识别可邮寄的 class 实例。 From the docs:
Once you have specified your recipients, you may pass an instance of your mailable class to the send method
所以当你这样做时:
), function($message) use ($request)
您实际上是在将 $message
重新定义为可邮寄 class 的实例,并且您原来的 $message
被覆盖了。
要修复,只需使用不同的变量名称以避免混淆:
Mail::send('emails.send',
array(
'name' => $request->get('name'),
'addressee' => $request->get('addressee'),
'user_message' => $request->get('message'), // <- changed
'location' => $id
), function($message) use ($request) // <- do not change
现在在您的视图中,您可以访问您的 $user_message
。
<p class="text-justify font-bold">
<strong>{!! $user_message !!}</strong>