使用Laravel 5.4发送电子邮件

时间:2017-08-23 22:33:52

标签: laravel send email-spam

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

除了在电子邮件中显示消息外,一切正常。 请帮帮我=(

3 个答案:

答案 0 :(得分:0)

您需要在一个变量中呈现视图,然后需要设置消息正文。 例如:

    $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');

答案 1 :(得分:0)

在您看来,您已将消息注释掉:

{{-- $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

答案 2 :(得分:0)

你有一个变量碰撞。首先,您要将$message设置为来自您用户的一些内容:

'message'       => $request->get('message'),

但是你在发送方法中使用$message来识别可邮寄的类实例。 From the docs

  

指定收件人后,您可以将mailable类的实例传递给send方法

所以当你这样做时:

), function($message) use ($request)

您实际上正在重新定义$message作为您的mailable类的实例,并且您的原始$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>