使用 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

See the Laravel docs on blade.

您遇到了可变碰撞。首先,您将 $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>