【发布时间】:2016-09-19 05:42:45
【问题描述】:
我的控制器中有一个函数可以保存来自用户的消息,首先它将消息保存到数据库中,然后将电子邮件发送到该用户的邮件地址,然后将 json 响应返回给发件人。
问题:有时邮件发送时间过长,发件人需要等待很长时间才能收到回复,或者有时甚至没有发送邮件(由于一些 smpt 问题等。 ) 并且它会触发一个错误,但是我并不关心是否发送了电子邮件,最重要的是该消息已保存到数据库中。
我想要达到的目标:
我想将消息保存到数据库,->
在向发送者发送响应之后,->
并且只有在运行 Mail::send();
所以在控制器返回 json 给发送者之后运行 Mail::send(),所以无论 Mail::send() 如何执行,发送者都会收到一个肯定的响应
$message = new MessageDB;
$message->listing_id = e(Input::get('listing_id'));
$message->user_id = $listing->User->id;
$message->name = e(Input::get('name'));
$message->mobile = e(Input::get('mobile'));
$message->message = e(Input::get('message'));
if ($message->save()) {
Mail::send('emails.message', ['user' => 'Jon Doe','message' => $message], function($m) use($listing){
$listing_agent = $listing->Agent;
if ($listing->agent == null) {
$mail_to = $listing->User->email;
$name = '';
}else{
$mail_to = $listing->Agent->email;
$name = $listing->Agent->first_name.' '.$listing->Agent->second_name;
}
$m->to($mail_to)->subject('new message from company.com');
});
return ['success' => 1, 'message' => 'messasge has been sent'];
【问题讨论】:
-
究竟是什么问题?
-
我想在返回响应后执行 Mail::send() ,或者做一些事情使 Mail::send() 不会影响响应和响应时间
-
使用
Mail::queue()而不是Mail::send()。简单!