在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>
答案 0 :(得分:0)
虽然发送电子邮件$ message变量似乎与laravels $ message变量冲突,但我不太清楚为什么。在您的$ cdata而不是message
键中使用其他内容,例如$text
$cdata = array('text' => Request::input('message'), 'email' => $data->email);
答案 1 :(得分:0)
您必须在代码中更改两项内容才能生效。
首先:(选择如何使用变量$ 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
。
第二:(更改变量$ message name)
注意: $ message消息变量始终传递给电子邮件视图,并允许内联嵌入附件。因此,您应该避免在视图有效负载中传递消息变量。
<强> Source : Document laravel 5.1 - mail#introduction 强>
因此,您必须更改$message
变量名称,因为Framework会将其视为类 Illuminate \ Mail \ Message 的对象。
希望这有帮助。