在Laravel Mail 5.5中将变量传递给邮件时出错

时间:2018-01-19 13:07:35

标签: php laravel email

我尝试在Laravel 5.5中发送联系邮件,我阅读了文档并尝试了使用其中描述的方法,但不起作用。这是我的代码。

这是我的表单

    <form class="send_message" action="{{url('send_mail_error_card_r')}}" method="post">
      <div class="text_box">
        {{csrf_field()}}
        <textarea id="send_mail_error_card" name="send_mail_error_card" rows="5" cols="40" class="form-control send_mail_error_card"></textarea>
        <div class="send_button_box">
        <button type="submit" id="send_message" class="btn btn-default">Enviar <span class="glyphicon glyphicon-send"></span></button>
        </div>
      </div>
    </form>

我的路线

Route::post('/send_mail_error_card_r', 'HomeController@send_mail_error_card_r');

我的控制器

public function send_mail_error_card_r(Request $request)
{   $email = 'viniciusdemourarosa@gmail.com';
    $data['text'] = $request->send_mail_error_card;
    Mail::send('mail.contact', $data, function($message) use ($email){
      $message->from('vinicius.rosa@bolder.com.br', 'Contabileads Developer');
      $message->to($email);
      $message->subject("Atenção!");
    });
}

我的邮件视图

<!DOCTYPE html>
<html>
  <body>
    {{$data['text']}}
  </body>
</html>

我的邮件联系

public function __construct($data)
{
  $this->data = $data;
}

/**
 * Build the message.
 *
 * @return $this
 */
public function build()
{
    return $this->view('mail.contact')->with(['data', $this->data]);
}

我的邮件配置

config/mail.php

'driver' => env('MAIL_DRIVER', 'mailgun'),

config/services.php

'mailgun' => [
    'domain' => 'secret',
    'secret' => 'secret',
],

.ENV档案

MAIL_DRIVER=mailgun
MAIL_HOST=smtp.mailgun.org
MAIL_PORT=587
MAIL_USERNAME=secret
MAIL_PASSWORD=secret
MAIL_ENCRYPTION=ssl

我的代码返回

ErrorException (E_ERROR)
Undefined variable: data (View: /var/www/html/planos/resources/views/mail/contact.blade.php)

有什么建议吗?提前谢谢!

3 个答案:

答案 0 :(得分:4)

数据属性必须为public

public $data;
public function __construct($data)
{
    $this->data = $data;
}

来自the docs

  

通常,您需要将一些数据传递给您在呈现电子邮件HTML时可以使用的视图。您可以通过两种方式为视图提供数据。首先,您的mailable类中定义的任何public属性都将自动提供给视图

答案 1 :(得分:1)

public function build()
{  
    $data = $this->data;
    return $this->view('mail.contact')->with(['data', $data]);
}

这将非常适合您。干杯

答案 2 :(得分:1)

在邮件构建功能中更改此功能

->with(['data', $this->data]);

到此

->with(['data' => $this->data]);