【问题标题】:Working send emails with Laravel 5.4使用 Laravel 5.4 发送电子邮件
【发布时间】:2018-02-01 16:01:17
【问题描述】:

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

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

【问题讨论】:

  • 在您的代码中,$message 是消息实例,它不是您可以显示的内容。您传递给视图的变量是$name$adressee 等。因此您可以在视图中使用{{ $name }}。当您输入{{ $message }} 时,您想显示什么?
  • $message 表示电子邮件的主要内容,因为,是用户在电子邮件中发送给收件人的消息,我想在收件人收到的电子邮件中显示该消息,并且我尝试使用变量 $message,但不起作用,我不知道该怎么做。现在我有另一个问题,是邮件中显示的消息,而不是刀片视图,它只是地址看到的平面文本。
  • 不,$message 是您的可邮寄类的一个实例 - see the docs。如果您在视图中尝试var_dump($message),您将看到类似object(Illuminate\Mail\Message)#403 (1) { ["swift":protected]=&gt; object(Swift_Message... 的内容。 “电子邮件的主要内容”是您的观点。
  • 我终于明白问题所在了——我发布了一个答案。

标签: laravel send email-spam


【解决方案1】:

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

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

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

一旦你指定了你的接收者,你就可以将你的 mailable 类的实例传递给 send 方法

所以当你这样做时:

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

您实际上是在将$message 重新定义为您的可邮寄类的实例,而您原来的$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>

【讨论】:

  • 我会试试的,谢谢你的帮助,给我几分钟,我修好它,我会告诉你的。
  • 男士们,我真的很喜欢这个,工作完美,你是最棒的,我真的很感激你,对此我无话可说,非常感谢!
  • 我明白了!谢谢!
【解决方案2】:

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

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

【讨论】:

  • 我这样做时遇到了下一个问题:未定义的变量:位置(查看:/home/vagrant/Code/BDC/resources/views/emails/send.blade.php)位置是路线收件人在单击链接时将看到的视图,并一直工作到 put $request = view('emails.send')->with('message',$request)->render();但是,当我刚刚输入: ->setBody($request->message,'text/html');电子邮件将与消息一起发送,但不与视图一起发送,在收件箱中出现消息,但不会与其他内容、按钮、标题等一起发送我认为问题出在渲染上,或者我真的不知道
【解决方案3】:

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

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

【讨论】:

  • 是的,我知道,而且是因为我试图那样做,但没有奏效,所以我评论了它。
猜你喜欢
  • 1970-01-01
  • 2019-03-12
  • 1970-01-01
  • 2017-07-02
  • 2017-11-24
  • 1970-01-01
  • 1970-01-01
  • 2019-01-21
  • 2015-12-20
相关资源
最近更新 更多