Laravel将参数传递给电子邮件页面

时间:2015-11-17 09:41:46

标签: laravel-5.2

Laravel 5下我尝试使用以下路线向用户发送邮件:

Route::post('/sendEmailToUser', array(
    'as' => 'sendEmailToUser', function () {
        $data = \App\User::find(Request::input('user_id'));
        $cdata = array('message' => Request::input('message'), 'email' => $data->email);

        Mail::send('emails.custom_email_to_user', $cdata, function ($message) use ($data) {
            $message->to($data['email'], 'Sample')->subject('Sample');
        });

        if (count(Mail::failures()) > 0) {
            Log::emergency("email dont send to user");
            return 0;
        } else {
            Log::info("email successfull send to user id" + Request::input('user_id'));
            return 1;
        }
    }
));

$cdata的结果是:

Array
(
    [message] => this is test mail
    [email] => myname@server.com
)

不幸的是我收到了这个错误:

htmlentities() expects parameter 1 to be string, object given (View: D:\xampp\htdocs\epay-pro\resources\views\emails\custom_email_to_user.blade.php)

我的简单电子邮件页面是:

<!DOCTYPE html>
<html lang="en-US">
    <head>
        <meta charset="utf-8">
    </head>
    <body>
        <h2>Sample</h2>
        <div>
            {{$message}}
            {{ URL::to('www.epay.li') }}<br/>
        </div>
    </body>
</html>

2 个答案:

答案 0 :(得分:0)

虽然发送电子邮件$ message变量似乎与laravels $ message变量冲突,但我不太清楚为什么。在您的$ cdata而不是message键中使用其他内容,例如$text

$cdata = array('text' => Request::input('message'), 'email' => $data->email);

答案 1 :(得分:0)

您必须在代码中更改两项内容才能生效。

  1. 首先:(选择如何使用变量$ data)

    您有时使用相同的变量$data array,有时使用object

    作为对象:

    $cdata = array('message' => Request::input('message'), 'email' => $data->email);
    

    作为数组:

    $message->to($data['email'], 'Sample')->subject('Sample');
    

    通常您应该将其用作object,因为User::find将返回一个对象。 注意:如果您想将其用作数组,则只需在toArray()之后添加find

  2. 第二:(更改变量$ message name)

      

    注意: $ message消息变量始终传递给电子邮件视图,并允许内联嵌入附件。因此,您应该避免在视图有效负载中传递消息变量。

    <强> Source : Document laravel 5.1 - mail#introduction

    因此,您必须更改$message变量名称,因为Framework会将其视为类 Illuminate \ Mail \ Message 的对象。

  3. 希望这有帮助。